RE非捕获组

时间:2016-04-10 19:48:40

标签: python regex

我对非捕获组的使用有疑问(?:...)。

\b4[0-9]{12}(?:[0-9]{3})\b
(?:\d[ -]*?){13,16}\b

在第一种情况下,提取的字符串将具有13或16位数字。最后3位是否出现是基于字符串的条件,因为括号即使括号中的{3}正好要求3位数? 在第二种情况下,我测试了re,发现只有数字被计入字符串的长度。短划线和空格不计入长度,尽管它们从字符串长度的边界放在同一个括号中。有谁知道原因?

由于

1 个答案:

答案 0 :(得分:0)

你错了。如上所述,第一个正好需要16位数字。如果您想允许13位数字,则需要在非匹配组后面?,如下所示:\b4[0-9]{12}(?:[0-9]{3})?\b

对于第二个,{13,16}适用于整个组。针对该组的每次匹配可以具有零个或多个空格或破折号。我刚才在一个非常相似的问题的答案中详细解释了这一点(也许y'所有人都在同一个班级或其他什么?):

(?:\d[ -]*?){13,16} - confused with the priority that is given in matching the pattern to the given regex