我刚刚在我的python类中学习了正则表达式,我需要帮助理解Regex中的一大块代码。该代码是一个常见的信用卡搜索问题:
\b4[0-9]{12}(?:[0-9]{3})\b
我只是想知道最后一部分意味着什么:
(?:[0-9]{3})\b
我从另一个消息来源读到它正在分组断言,但有人可以更清楚地向我解释一下吗?
此外,最后的\ b表示什么?
非常感谢
答案 0 :(得分:1)
它被称为非捕获组。这意味着该组后跟?:是可选的,因为VISA卡的长度在16到13位之间,具体取决于它是新卡还是长卡。这会添加3个可选数字,可能包括也可能不包含在搜索中。
至于最后的\ b,您可以将其视为报价中的整个单词搜索。
查看此网站以获取更多信息: http://www.regular-expressions.info/creditcard.html
干杯!
答案 1 :(得分:0)
您可以使用括号来识别匹配中的组。
?:
标记非捕获组
>>> s = '4123412341234123'
>>> print (re.match(r"\b4[0-9]{12}(?:[0-9]{3})\b", s).groups())
()
>>> print (re.match(r"\b4[0-9]{12}([0-9]{3})\b", s).groups())
('123',)
\b
匹配字边界字符
答案 2 :(得分:0)
(?:)
表示non-capturing
组。这意味着不捕获随后的匹配。如果您使用()
(而不是(?:)
),它会捕获变量中匹配的内容,以后可以在$1
或\1
中使用您的语言支持。如果您使用(?:)
,则匹配不会存储在任何变量中。
\b
表示单词边界。它是单词字符和非单词字符之间的位置。
(?: #Non-capturing group (Do not store it in a variable)
[0-9] #Match any digit between 0 to 9
{3} #Do this three times (i.e Match any digit between 0 to 9 three times)
)
\b #Word boundary