【问题标题】:Regex that matches a string that starts with whitespace and has only digits after匹配以空格开头且后面只有数字的字符串的正则表达式
【发布时间】:2016-03-15 19:24:29
【问题描述】:

我需要一个匹配以下行的正则表达式:

    123
  12345
1234567

所以我知道字符串的最大长度 (7),并且该字符串的开头只能包含数字和空格。

我试过这个:[ 0-9]{7},但是这个会匹配像12 34这样的字符串

【问题讨论】:

  • 您使用的是什么正则表达式风格/工具?

标签: regex


【解决方案1】:

[ 0-9]{7} 将匹配任意顺序的 7 个数字或空格,并且此模式可以返回部分匹配,因为它没有锚定在字符串的开头/结尾。

您可以使用前瞻限制字符串的长度,并使用 sequential 子模式:

^(?=[\s\d]{7}$)\s*\d*$

regex demo

模式分解:

  • ^ - 字符串开头
  • (?=[\s\d]{7}$) - 只有当整个字符串由空格或/和全长 7 的数字组成时,该字符串才会匹配
  • \s* - 0+ 个空格符号
  • \d* - 0+ 位
  • $ - 字符串结束。

【讨论】:

  • 实际上我需要的是一个正则表达式来匹配以下模式:4digitis-7digits(开头有空格)-1digit,我将您的答案添加到此:^[\d]{4}-(?=[\s\d]{7})\s*\d*-[\d]{1}$ 请参阅:regex101.com/r/eB0fR3/1
  • 你写的模式可以写成^\d{4}-(?=[\s\d]{7})\s*\d*-\d$(?=[\s\d]{7}) 前瞻要求 \s*\d* 模式至少匹配 7 个字符。请参阅demo。我想你需要^\d{4}-(?=[\s\d]{7}-)\s*\d*-\d$
  • 是的,你是对的,这实际上是我真正需要的。谢谢!
【解决方案2】:

^(?=[\s\d]{7}$)\s*\d*$

看起来不错,并且将匹配所有给出的示例案例,同时将其 FP 概率降低到接近于零。

不过,我发现某些情况下它可能会出现 FP,特别是当字符串仅由 7 个空格或 7 个换行符或 7 个新制表符组成时,我觉得这不是预期的。

演示:https://regex101.com/r/eH3jM6/2

所以,为了让它更完美,我们来修改一下吧:

                          ^(?=[ \d]{7}$) {0,6}\d*$

更多参考:查看

https://www.talentcookie.com/2015/07/lets-practice-regular-expression/ https://www.talentcookie.com/2016/01/some-useful-regular-expression-terminologies/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-15
    • 2013-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多