【问题标题】:Regex to exclude a specific string but not strings having the substring正则表达式排除特定字符串但不排除具有子字符串的字符串
【发布时间】:2015-02-09 17:43:46
【问题描述】:

我目前需要一个可以排除特定字符串但不能排除包含该字符串的单词的正则表达式。例如,如果您有一个由 0 和 1 组成的字符串。包含任意数量的 1 和任意数量的 0 的任何字符串,仅包含 3 个 0。

例如:

100100  pass
1000100 fail
00100   pass
000100  fail
0000100 pass
111000  fail
11100001 pass

我尝试了以下正则表达式,但它只接受可以以 1 开头但必须以 0 结尾的字符串。

^(1*([0]{0,2}|[0]{4,}))$

【问题讨论】:

    标签: regex regex-negation regex-lookarounds


    【解决方案1】:

    你可以使用:

    ^(?!.*?(?<!0)000(?!0))[01]+$
    

    RegEx Demo

    【讨论】:

    • 它不会在 00001000 上失败
    【解决方案2】:

    您可以创建一个接受您想要的模式的正则表达式,但这会很复杂。如果您创建否定正则表达式 .*(1|^)000(1|$).* 并测试您的字符串是否与此正则表达式不匹配,则会更容易。

    这是示例 python 代码:

    import re
    r = re.compile("(1|^)000(1|$)")
    tests = [
        "100100", "1000100", "00100", "000100", "0000100", "111000", "11100001"
    ]
    for t in tests:
        print("%s %s" % (t, "fail" if r.search(t) else "pass"))
    

    结果:

    100100 pass
    1000100 fail
    00100 pass
    000100 fail
    0000100 pass
    111000 fail
    11100001 pass
    

    【讨论】:

      【解决方案3】:

      您可以使用以下基于正则表达式的外观。

      ^(?![10]*(?<!0)000(?!0)[10]*)[10]+$
      

      DEMO

      • (?&lt;!0)000(?!0) 断言000 的前后不会出现0 以外的任何元素

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-01-12
        • 2012-02-17
        • 1970-01-01
        • 2020-10-27
        • 1970-01-01
        • 2017-04-13
        相关资源
        最近更新 更多