gpt4 book ai didi

Python 正则表达式负后视不匹配失败

转载 作者:行者123 更新时间:2023-11-28 16:36:26 26 4
gpt4 key购买 nike

我正在编写一个正则表达式来匹配电话号码。我遇到的问题之一是有些邮政编码看起来像电话号码。例如,在巴西,邮政编码如下所示:

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,那么它就不是电话号码,而是邮政编码。我一直在尝试编写一个正则表达式来使用 negative lookbehind 捕获它,但它不起作用。它仍然匹配:

In [62]: re.search(r"(?<!CEP )(\d+\.\d+-\d+)", "CEP 30.160-0131")
Out[62]: <_sre.SRE_Match at 0x102150eb8>

为什么它仍然匹配,我怎样才能让负面回溯导致匹配失败?

最佳答案

表达式匹配,因为您没有做任何事情来锚定数字。例如:

"CEP 11.213-132"

将匹配 1.213-132,因为它不会紧跟在 CEP 之后。但是您可以强制在第一个数字之前添加一个空格或行 anchor 的开头:

re.search(r"(?<!CEP)(?:\s+|^)(\d+\.\d+-\d+)", s)

关于Python 正则表达式负后视不匹配失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25638399/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com