Visa信用卡正则表达式:分组断言

时间:2016-04-10 06:35:00

标签: python regex

我刚刚在我的python类中学习了正则表达式,我需要帮助理解Regex中的一大块代码。该代码是一个常见的信用卡搜索问题:

\b4[0-9]{12}(?:[0-9]{3})\b

我只是想知道最后一部分意味着什么:

(?:[0-9]{3})\b

我从另一个消息来源读到它正在分组断言,但有人可以更清楚地向我解释一下吗?

此外,最后的\ b表示什么?

非常感谢

3 个答案:

答案 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