【问题标题】:Match only exact numbers, not pre of suffixed with slash/dash etc仅匹配确切的数字,而不是带有斜杠/破折号等后缀的前缀
【发布时间】:2015-08-07 16:28:02
【问题描述】:

我需要一个只匹配长度为 7 的数字的正则表达式(它们可以有前导零)。我使用了以下超级简单的正则表达式:\b[0-9]{7}\b。但是,此正则表达式也匹配例如中的数字。 5254-6408499(0241)4013999(见 https://regex101.com/r/zF5hV7/1)。

如何防止它们被匹配?我只希望长度为 7 的数字具有前导和/或尾随空格。

【问题讨论】:

  • 您可能想为此使用否定的环顾四周。
  • 谢谢,尝试了\b(?<!(-|\(|\/|\)))[0-9]{7}(?!-|\(|\/|\))\b 并且似乎有效。但是看到下面的cmets,我觉得有点太复杂了。

标签: regex


【解决方案1】:

根据正则表达式的风格,您可以创建自己的边界:

(?<=^| )\d{7}(?= |$)

仅当引擎断言后面是空格或字符串结尾时,才会断言字符串的开头或空格在前,以精确匹配 7 位数字。

【讨论】:

  • 我选择了这个答案,所以我不必与捕获组合作。
  • 似乎在 Perl 中不起作用 Variable length lookbehind not implemented in regex m/(?&lt;=^| )\d{7}(?= |$)/ :(
  • 你可以替换它,(?:^| )\K
【解决方案2】:

你可以使用这个正则表达式:

(?:^|\s)([0-9]{7})(?:\s|$)

并抓住捕获的第 1 组

Updated RegEx Demo

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-08-21
    • 1970-01-01
    • 2021-08-25
    • 1970-01-01
    • 2022-06-10
    • 1970-01-01
    • 2011-10-05
    • 2014-07-10
    相关资源
    最近更新 更多