正则表达式以避免给定的一组子字符串
这个问题在这里已经有了答案:
这就是您对以下内容使用否定性前瞻断言的原因:
^(?!.*(abc|def|ghi))
只要输入字符串不包含任何“坏”字,就会匹配。
请注意,lookahead断言本身不匹配任何内容,所以匹配结果(在匹配成功的情况下)将是一个空字符串。
在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]
你可以使用lookaheads:
^(?!.*?(?:abc|def|ghi)).*$
(?!...)
称为negative lookahead
(?:...)
被称为非捕获组。 正则表达式参考
如果你有一个包含“禁止”字样的字符串,如下面的“
学生苹果玛丽亚定义ghint abc123 righit
而你只是想知道这个字符串是否包含你可以使用的字符串:
.*?(?!def|abc|ghi)
这会给你4场比赛
这是禁止词语的第一个字母(* def * inition,* ghi * nt,* abc * 123,ri * ghi * t)
如果您的字符串中找不到匹配项,则不会有“禁止”字词。
你也可以使用regex.replace:
w*(abc|def|ghi)w*
用“”代替你的“禁止”子字符串,允许你保留所有未禁止的子字符串。
链接地址: http://www.djcxy.com/p/13389.html