我对非捕获组的使用有疑问(?:...)。
\b4[0-9]{12}(?:[0-9]{3})\b
(?:\d[ -]*?){13,16}\b
在第一种情况下,提取的字符串将具有13或16位数字。最后3位是否出现是基于字符串的条件,因为括号即使括号中的{3}正好要求3位数? 在第二种情况下,我测试了re,发现只有数字被计入字符串的长度。短划线和空格不计入长度,尽管它们从字符串长度的边界放在同一个括号中。有谁知道原因?
由于
答案 0 :(得分:0)
你错了。如上所述,第一个正好需要16位数字。如果您想允许13位数字,则需要在非匹配组后面?
,如下所示:\b4[0-9]{12}(?:[0-9]{3})?\b
。
对于第二个,{13,16}
适用于整个组。针对该组的每次匹配可以具有零个或多个空格或破折号。我刚才在一个非常相似的问题的答案中详细解释了这一点(也许y'所有人都在同一个班级或其他什么?):