我正在寻找一个可以匹配不包含给定子串集的所有内容的单个正则表达式。
例如,一个正则表达式将匹配不包含子字符串“abc”,“def”,ghi“
的所有内容在此示例中,正则表达式将匹配“student”,“apple”和“maria”,但不匹配“definition”,“ghint”或“abc123”
提前致谢
答案 0 :(得分:1)
这就是你使用negative lookahead assertion:
^(?!.*(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]
答案 1 :(得分:1)
答案 2 :(得分:0)
如果你有一个包含“禁止”字样的字符串,如下面的“
学生苹果玛丽亚定义ghint abc123 righit
你只想知道字符串是否包含它们,你可以使用:
.*?(?!def|abc|ghi)
这将为您提供4场比赛
这是禁词的第一个字母(* def * inition,* ghi * nt,* abc * 123,ri * ghi * t)
如果在您的字符串中找不到匹配项,则没有“禁止”字样。
你也可以使用regex.replace:
\w*(abc|def|ghi)\w*
用“”替换你的“禁止”子串,允许你保留所有非禁止的子串。