0

我正在寻找一个可以匹配不包含给定子字符串集的所有内容的正则表达式。

例如,将匹配不包含子字符串“abc”、“def”、ghi”的所有内容的正则表达式

在此示例中,正则表达式将匹配“student”、“apple”和“maria”,但不会匹配“definition”、“ghint”或“abc123”

提前致谢

4

3 回答 3

1

这就是您使用否定前瞻断言的原因:

^(?!.*(abc|def|ghi))

只要输入字符串不包含任何“坏”字,就会匹配。

请注意,前瞻断言本身不匹配任何内容,因此匹配结果(在成功匹配的情况下)将是一个空字符串。

在 Python 中:

>>> regex =  re.compile("^(?!.*(abc|def|ghi))")
>>> [bool(regex.match(s)) for s in ("student", "apple", "maria",
...                                 "definition", "ghint", "abc123")]
[True, True, True, False, False, False]
于 2013-10-10T20:37:07.540 回答
1

您可以使用前瞻:

^(?!.*?(?:abc|def|ghi)).*$
  • (?!...)叫做negative lookahead
  • (?:...)称为非捕获组。

正则表达式参考

于 2013-10-10T20:37:16.140 回答
0

如果您有一个包含“禁止”字样的字符串,如下所示“

学生 apple maria 定义 ghint abc123 对

你只想知道字符串是否包含它们,你可以使用:

.*?(?!def|abc|ghi)

这将为您提供 4 场比赛

  • d
  • G
  • 一个
  • G

是禁用词的第一个字母 ( * def *inition, * ghi *nt, * abc *123, ri* ghi *t )

如果在您的字符串中没有找到匹配项,则没有“禁止”字样。

您还可以使用 regex.replace 使用:

\w*(abc|def|ghi)\w*

将您的“禁止”子字符串替换为“”,允许您保留所有非禁止子字符串。

于 2013-10-10T21:05:30.430 回答