【问题标题】:Regex to match the pattern 0123456789 with unknown length正则表达式以匹配未知长度的模式 0123456789
【发布时间】:2021-06-26 08:08:15
【问题描述】:

我想匹配以下模式:0123456789

问题是我事先不知道字符串的长度,但我知道它从零开始。所以可能的字符串是:

  • (空字符串也有效)
  • 01234
  • 0123456789
  • 01234567890123
  • 012345678901234567890123

我如何才能仅将其与正则表达式匹配?

谢谢!

编辑:

需要匹配从头到尾的整个字符串

【问题讨论】:

  • 您能告诉我您使用哪种编程语言进行匹配检查吗?
  • @Kent,我正在使用 Python
  • @JvdV,我对正则表达式的了解非常有限,所以我决定在这里咨询(实际上是想指出您之前的答案)
  • 非常感谢@JvdV,我打算这样做!你能直观地解释一下这个正则表达式是如何运作的吗?另外,请您写下这个作为答案,以便我批准

标签: regex python-2.7


【解决方案1】:

似乎您只需要对不久前的this 上一个答案进行简单的改编:

^(?!.*(?:0[^1]|1[^2]|2[^3]|3[^4]|4[^5]|5[^6]|6[^7]|7[^8]|8[^9]|9[^0])|[1-9])\d*$

主要区别是负前瞻内的另一个交替 ....|[1-9] 以防止前导零以外的任何内容。然后我们将\d{30} 替换为\d* 以匹配一个空字符串。

【讨论】:

    【解决方案2】:

    Rodolfo 的回答很棒。不过,还是有一些改进的地方!

    正则表达式模式

    所有测试用例都以这种模式通过。

    ^((0(1(2(3(4(5(6(7(8(9)?)?)?)?)?)?)?)?)?)?)+$
    

    Regex Demo

    【讨论】:

    • 提醒一下,这也将允许像“0000”这样的东西。
    • 即使像 '010101010120120123000' 这样的模式也是有效的。请注意这里=)
    【解决方案3】:

    ^(0(1(2(3(4(5(6(7(8(9)?)?)?)?)?)?)?)?)?)+$

    在这里测试:https://regex101.com/

    【讨论】:

    • 嗨鲁道夫,非常感谢!似乎字符串“0”不匹配。为什么?
    • 另外,是否可以匹配到字符串结尾? (所以像“0123456X”这样的东西会失败)
    • @yaseco 我已经编辑了答案。 “0 不匹配”是由于缺少 ?我补充说。我还在开头添加了 ^ 并在末尾添加了 $ 以匹配单行上的完整字符串。随意调整它以适应您的需求。
    • 这也将匹配诸如010101012012012 之类的字符串。 (我不确定这是否是故意的。我只是指出来。)
    【解决方案4】:

    我认为最简单的方法是使用 or 运算符。

    (0123456789|012345678|01234567|0123456|012345|01234|0123|012|01|0)+
    

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

    【讨论】:

    • 我的眼睛解析器告诉我,这将匹配 00000000000101010101
    猜你喜欢
    • 2017-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-27
    • 2011-11-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多