假设我给出了123 *或1234 *的模式,我想匹配以该模式开头的任何10位数字。它应该有10位数。
示例:
模式:123应匹配1234567890但不匹配12345678
我试过这个正则表达式:(^(123)(\ d {0,10}))(?(1)\ d {10})..显然它不起作用。我试图将模式和剩余数字分组为两个不同的组。它在捕获的组(https://regex101.com/)之后匹配10位数。我如何检查捕获的组正好是10位数?或者这里有什么好的诀窍。请指导我。
答案 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}作为示例