正则表达式与特定模式完全匹配10位数

时间:2017-08-21 15:34:27

标签: regex regex-greedy regex-group

假设我给出了123 *或1234 *的模式,我想匹配以该模式开头的任何10位数字。它应该有10位数。

示例:

模式:123应匹配1234567890但不匹配12345678

我试过这个正则表达式:(^(123)(\ d {0,10}))(?(1)\ d {10})..显然它不起作用。我试图将模式和剩余数字分组为两个不同的组。它在捕获的组(https://regex101.com/)之后匹配10位数。我如何检查捕获的组正好是10位数?或者这里有什么好的诀窍。请指导我。

2 个答案:

答案 0 :(得分:2)

听起来像positive lookahead

的情况
(?=123)\d{10}

这将匹配任何正好10位数的序列,但仅限于前缀123。测试here

类似于前缀1234

(?=1234)\d{10}

当然,如果您事先知道前缀长度,则可以使用123\d{7},但是您必须更改每个前缀更改的范围限制(例如:1234\d{6})。

此外,为确保仅捕获10个数字的孤立组,您可能希望使用(零长度)字边界\b锚定上述表达式:

\b(?=123)\d{10}\b

或者,如果您的序列可以在单词中出现,您可能希望在\d上使用负面的lookbehind和lookahead(正如@Wiktor在评论中所建议的那样):

(?<!\d)(?=123)\d{10}(?!\d)

答案 1 :(得分:1)

我会保持简单:

import re

text = "1234567890"

match = re.search("^123\d{7}$|^1111\d{6}$", text)
if match:
    print ("matched")

只需抛出你的两个模式就可以了!请注意,123 *会捕获1234 *所以我使用1111 \ d {6}作为示例