【问题标题】:regex pattern to match specific number pattern , skip if there different pattern正则表达式模式以匹配特定数字模式,如果有不同的模式则跳过
【发布时间】:2013-08-19 00:19:23
【问题描述】:

要求:

如果在句子中找到模式57XXXXXXX OR 57XXXXXXX-X,则复制这个匹配的模式(X-表示7个整数和57 是必须存在的常量值),否则忽略完整的句子。

我写了一个正则表达式模式57[0-9]{7}|-[0-9]{1} 来匹配这两个模式。

如果找到低于模式(在 57 之后是 8 位而不是 7 ,那么仍然高于正则表达式仍然会得到匹配模式(实际上期望正则表达式不匹配)

例如5712345678-0(在 57 之后,句子中的 8 位数字)--> 正则表达式匹配并给出 571234567-0

使用java编译上述模式。

【问题讨论】:

    标签: java regex


    【解决方案1】:

    你可以试试这个:

    \b57\d{7}(?:-\d)?\b

    它是这样的:

    在 Java 中,这将是 Pattern.compile("\\b57\\d{7}(?:-\\d)?\\b")

    【讨论】:

    • 感谢您的快速响应.. 我已经尝试了您的数字 5712345679-0 模式,输出为 571234567 。但我的要求是,如果不是在 57XXXXXXX OR 57XXXXXXX-X 中找到的句子,则忽略完整的数字格式。
    【解决方案2】:

    差别不大,但允许字母和下划线:

    (?:(?<=[^0-9])|^)57[0-9]{7}(?:-[0-9])?(?:(?=[^0-9])|$)
    

    【讨论】:

      【解决方案3】:

      在这种情况下,您可以使用前瞻断言。

      57\d{7}(?:-\d)?(?!\d)
      

      正则表达式:

      57              '57'
       \d{7}          digits (0-9) (7 times)
           (?:        group, but do not capture:
             -        '-'
             \d       digits (0-9)
           )?         end of grouping
            (?!       look ahead to see if there is not:
              \d      digits (0-9)
            )         end of look-ahead
      

      或者:

      (?:57\d{7})(?:-\d)?(?!\d)
      

      正则表达式:

      (?:             group, but do not capture:
        57            '57'
         \d{7}        digits (0-9) (7 times)
      )               end of grouping
       (?:            group, but do not capture
         -            '-'
          \d          digits (0-9)
       )?             end of grouping
        (?!           look ahead to see if there is not:
          \d          digits (0-9)
        )             end of look-ahead
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-11-28
        • 2019-06-01
        • 2017-09-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多