【问题标题】:Regex - Match alpha characters that don't match a subset of alpha characters (C#)正则表达式 - 匹配与字母字符子集不匹配的字母字符 (C#)
【发布时间】:2011-01-09 18:57:30
【问题描述】:

假设我有一组字符串“123AB”、“456CDEF”、“789G”、“012-HI”。如何找到所有数字(1 或更多)后跟 alpha(1 或更多)且没有特殊字符的字符串,其中 alpha 字符不是 AB

为了澄清,应用于先前集合的正则表达式应该产生“456CDEF”和“789G”。 “123AB”被忽略,因为 alpha 值为 AB,“012-HI”被忽略,因为它包含非 alpha。我正在寻找的正则表达式,减去特殊的 AB 规则,是^[0-9]+[A-Z]+$。案例无关紧要。我尝试了[^ ] 规则的一些变体,但没有成功,因为我想出的所有模式都允许特殊字符。

概括地说,如何使用单个正则表达式模式匹配一​​组不匹配某个 alpha 值子集的 alpha 值?

注意:“123ABC”也应该被接受。只有带有 AB 的字符串应该被忽略。

【问题讨论】:

    标签: c# regex


    【解决方案1】:

    你想要一个前瞻断言:^[0-9]+(?!AB$)[A-Z]+$

    【讨论】:

    • 当 AB 变为 AB、CD 和 EF 时,简短、甜美且易于扩展!
    【解决方案2】:

    没有前瞻:

    ^[0-9]+([B-Z]|A[AC-Z])[A-Z]*$

    编辑:
    已撤回,因为这与 123A 之类的内容不匹配。但我会留下可见的答案作为不起作用的示例。

    【讨论】:

      【解决方案3】:

      ^\d+(?:a(?:b[a-z]+|[^b][a-z]*)?|[^a][a-z]*)$
      字符串的开头,然后是 1 个或多个数字,然后是 (A) a 后跟 b 后跟更多字母,或 (B) a 后跟除 b 以外的任何字母以及可选的任何字母,或 (C) 任何其他字母比 a 后跟任何字母,然后是字符串的结尾

      【讨论】:

        猜你喜欢
        • 2011-08-29
        • 2013-06-03
        • 1970-01-01
        • 2016-09-01
        • 1970-01-01
        • 2013-04-17
        • 2022-08-17
        • 2011-04-06
        相关资源
        最近更新 更多