我正在编写一个正则表达式来匹配电话号码。我遇到的问题之一是有些邮政编码看起来像电话号码。例如,在巴西,邮政编码长这样:
幸运的是,这样的邮政编码通常带有前缀,一般意味着“邮政编码”,就像这样:
为什么还会匹配成功,如何让负向后瞻失败从而不匹配呢?
30.160-0131
因此,一个简单的正则表达式将捕获它们作为误报:
In [63]: re.search(r"(?P<phone>\d+\.\d+-\d+)", "30.160-0131")
Out[63]: <_sre.SRE_Match at 0x102150990>
幸运的是,这样的邮政编码通常带有前缀,一般意味着“邮政编码”,就像这样:
。
CEP 30.160-0131
因此,如果您看到CEP前面有像电话号码一样的东西,那么它不是电话号码 - 它是邮政编码。我一直在尝试使用负向回顾后发断言编写正则表达式来捕获它,但它没有起作用。它仍然匹配:
In [62]: re.search(r"(?<!CEP )(\d+\.\d+-\d+)", "CEP 30.160-0131")
Out[62]: <_sre.SRE_Match at 0x102150eb8>
为什么还会匹配成功,如何让负向后瞻失败从而不匹配呢?