首页 > 解决方案 > 正则表达式没有捕捉到连续的信用卡号

问题描述

如果所有 16 位卡号都没有或不匹配,则我的正则表达式匹配号码有<space>或它有。"-"<space>"-"

(4\d{3}[\s\-\\]\d{4}[\s\-\\]\d{4}[\s\-\\]\d{4})

它匹配4444-0000-0000 0000 但它不匹配`4444000000000000

标签: regexpython-3.x

解决方案


?通过在字符类之后编码 a 来使分隔符可选:

\b(4\d{3}[\s-]?\d{4}[\s-]?\d{4}[\s-]?\d{4})\b

现场演示

\b我在两端添加了单词边界,例如 40001111222233338 的前 16 位不匹配。

[\s-]?\d{4}顺便说一句,您可以通过重复3 次来更简短地对其进行编码,如下所示:

\b(4\d{3}([\s-]?\d{4}){3})\b

推荐阅读