正则表达式以避免给定的一组子字符串

这个问题在这里已经有了答案:

  • 正则表达式匹配不包含单词的行吗? 25个答案

  • 这就是您对以下内容使用否定性前瞻断言的原因:

    ^(?!.*(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场比赛

  • d
  • G
  • 一个
  • G
  • 这是禁止词语的第一个字母(* def * inition,* ghi * nt,* abc * 123,ri * ghi * t)

    如果您的字符串中找不到匹配项,则不会有“禁止”字词。

    你也可以使用regex.replace:

    w*(abc|def|ghi)w*
    

    用“”代替你的“禁止”子字符串,允许你保留所有未禁止的子字符串。

    链接地址: http://www.djcxy.com/p/13389.html

    上一篇: Regular expression to avoid a given set of substrings

    下一篇: How to replace all word containing a pattern in vim?