python - 波兰电话号码的正则表达式

标签 python regex

我正在研究一个正则表达式来查找长字符串中的波兰电话号码。可能是 +48004848(不在括号中),后跟 9 个数字,中间有空格。

第一个想法是:

(\(?(\+|00)?48\)?)?[ -]?\d{3}[ -]?\d{3}[ -]?\d{3}

这会捕获 +48 123 456 789123456789 等内容,但也会在 1234567899876543211 中找到 2 个电话号码 - 这是 Not Acceptable 。所以我添加了单词边界:

\b(\(?(\+|00)?48\)?)?[ -]?\d{3}[ -]?\d{3}[ -]?\d{3}\b

但是这个正则表达式在诸如 (+48) 123 456 789 之类的字符串中只会捕获 48) 123 456 789。为什么开头被省略了?

( regex101 包含应该匹配/不应该匹配的示例)

最佳答案

您的 \b(\(?(\+|00)?48\)?)?[ -]?\d{3}[ -]?\d{3}[ -]?\d{3}\b regex 与可选部分不匹配,因为单词边界是强制性的,而可选模式可能会丢失。例如。 +48 123 456 789 字符串(仅匹配 48 123 456 789 )的问题如下:初始 \b 需要字边界,并且 + 之前没有字边界,因此它继续前进并在 4 之后找到 + - 这就是字边界所在的位置。接下来,(+48) 123 456 789 只产生了 48) 123 456 789,因为再次在 +4 之间找到了单词边界。

您可以直接告诉正则表达式引擎仅匹配前面或后面都没有单词字符的字符串,而不是使用单词边界。

使用

(?<!\w)(\(?(\+|00)?48\)?)?[ -]?\d{3}[ -]?\d{3}[ -]?\d{3}(?!\w)

查看 regex demo

如果匹配左侧有单词字符,(?<!\w) 负后向查找将导致匹配失败;如果匹配右侧有单词字符,(?!\w) 负前向查找将导致匹配失败。

关于python - 波兰电话号码的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45281440/

相关文章:

python - 在我的 Django 代码中获取 KeyError

python - 将 delta Lake 写入 AWS S3(无 Databricks)

java - 正则表达式用于匹配特定字符之间以及前后的空格

javascript - Regex中是否有一组javascript或任何其他语言的组

Python 3 压缩列表解包

Python - 使用 Split 将列分成多列

python - 如何使用增强来设置训练,同时确保未增强的实际图像也得到训练?

regex - 使用 Perl 匹配两个重叠模式

python - 正则表达式模式查找最长的元音序列

python - 用于捕获和替换模式中数字的正则表达式