【问题标题】:Ignore spaces and dashes and capture only digits of specific length忽略空格和破折号,仅捕获特定长度的数字
【发布时间】:2017-01-31 22:28:12
【问题描述】:

我有一个场景,其中我有一个包含一系列数字、空格或破折号的字符串。我只想捕获长度在 14 到 16 之间的数字组。我尝试了以下各种组合,

 1. [0-9](?:[- ]?){14,16}
 2. [0-9]([- ]?){14,16}
 3. [0-9]{15,16}|[0-9]{4}.?[0-9]{4}.?[0-9]{4}.?[0-9]{3,4}|[0-9]{4}([\\ \\-]?)[0-9]{4}\1[0-9]{4}[ ]?[-]?[ ]?[0-9]{3,4}|[0-9]{14}|[0-9]{4}([\\ ?|\\-?]?)[0-9]{4}\1[0-9]{4}\1[0-9]{4}

我的输入字符串是“我的数据包含字符串34567892345567 or 3456789234556734 or 345678923455634 and 34 5678 92345-567 or 34--567 8923---4556-734 or 34567-8923 455634

唯一不变的是后续数字的长度为 14、15 或 16。我的输出应该捕获以下组,

 1. 34567892345567
 2. 3456789234556734
 3. 345678923455634
 4. 34 5678  92345-567
 5. 34--567   8923---4556-734
 6. 34567-8923 455634

请建议一个正则表达式来捕获上述组。

【问题讨论】:

    标签: regex


    【解决方案1】:

    你在它周围跳舞。

    ([0-9][- ]*){14,16}
    

    解释:

    (__________){14,16} 14 到 16 个 ...
    _[0-9]_____________ 一个数字,后跟 ...
    ______[- ]*________ 0 个或多个连字符或空格

    注意:这将包括末尾的空格和连字符,但不包括开头。要在开头包含空格和连字符,请使用:

    [- ]*([0-9][- ]*){14,16}
    

    要在末尾排除空格和连字符,请使用:

    ([0-9][- ]*){13,15}[0-9]
    

    【讨论】:

    • 非常感谢。我会使用正则表达式在末尾排除空格和连字符。
    【解决方案2】:

    我会使用以下模式:

    (\d[ -]*?){14,16}
    

    确保在模式中包含? 以使其不贪婪。这样您的捕获组就不会包含尾随空格。

    https://regex101.com/r/JMNErk/1

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-04-07
      • 2022-01-10
      • 2010-10-19
      • 1970-01-01
      • 2016-01-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多