正则表达式匹配这些单词,但排除与这些匹配

时间:2014-08-17 12:46:36

标签: c# .net regex

我正在寻找一个正则表达式来运行几个字符串并在其中匹配这些单词:

Maces Armour Evasion Shields

排除包含这些字词的字符串:

Swords Axes Staves

例如(这两行是一个字符串):

12% Increased Physical Damage with Maces
8% Increased Armour

应该是一个匹配,但这个不应该是(这两行也是一个字符串,但它包含禁用词“剑”,需要的单词“evasion”):

10% Increased Evasion
8% Increased Attack Speed with Swords

如何排除该列表?

2 个答案:

答案 0 :(得分:4)

您可以对所需的单词使用前瞻,对禁止的单词使用负前瞻(如果您的正则表达式引擎允许这两个功能):

(?s)(?=.*\b(?:Maces|Armour|Evasion|Shields)\b)(?!.*\b(?:Swords|Axes|Staves)\b)^.+$

答案 1 :(得分:3)

您可以使用singleline正则表达式:

/^(?=.*(?>Maces|Armour|Evasion|Shields))(?!.*(?>Swords|Axes|Staves)).+$/s
  • (?=.*(?>Maces|Armour|Evasion|Shields))断言其中一个字出现在字符串 [无回溯]
  • (?!.*(?>Swords|Axes|Staves))断言字符串 [无回溯]
  • 中不存在这些字词

这是regex demo