【发布时间】:2016-01-15 09:00:54
【问题描述】:
我尝试制作一个正则表达式来匹配以单词“Remixes”结尾的字符串,但前提是它前面没有某些单词和字符。我想出了以下具有不同结果的正则表达式,但两者都不完全匹配:
^(\w+)((?!\&|\+|And|The|Of|Various|House|Unreleased|Selected).)\s(Remixes)$
这会排除字符串中的所有关键字,但当它包含多个单词时不包括:Think Twice Remixes 或当它前面有一个单词时:Various Remixes
^(.*)((?!\&|\+|And|The|Of|Various|House|Unreleased|Selected).)\s(Remixes)$
这不包括以下测试示例:Fill Me Up + Remixes,但不包括其他带有排除关键字的示例,例如 Sides & Remixes
如果排除单词是唯一且第一个前面的单词,我如何使第一个字符串匹配具有多个前面单词的字符串而不匹配它?
【问题讨论】:
-
必须是单个正则表达式吗?因为老实说,虽然您可以可能完成这项工作,但如果您实际使用脚本,解决方案就不会那么难看。
-
我觉得你可以用
^(?!.*(?:&|\+|\b(?:And|The|Of|Various|House|Unreleased|Selected)\b)).*\bRemixes$ -
我试过了,但它与关键字不匹配,并且没有我想要保留的前面单词的组。我也看不到在哪里指定该组
-
您是否在寻找后视镜?试试regex101 with this pattern(如果不区分大小写,请添加
i标志)。 -
@bobblebubble 这太完美了!我添加了一个分组以使其对我有用。谢谢你的帮助。 ^(.+)(?
标签: regex regex-lookarounds regex-greedy