gpt4 book ai didi

python regex - 查找电话号码

转载 作者:行者123 更新时间:2023-12-01 09:26:41 25 4
gpt4 key购买 nike

我尝试过以下代码:

import re

r = re.compile(r'''(\+)*\d* # optional + sign for international calls
([" "-\)]{,1}\d+)* # main chain of numbers, numbers separated by a space, ) or a hyphen
''',re.VERBOSE)
print(r.findall('+00 0000 0000 is my number and +44-787-77950 was my uk number'))

预期结果

[('+00',' 0000',' 0000'),('+44','-787','-77950')]

或者更好:

['+00 0000 0000','+44-787-77950']

但是生活并不那么容易,相反我得到了一个神秘

[('+', ' 0000'), ('', ''), ('', ''), ('', ''), ('', ''), ('', ''), ('', ''), ('', ''), ('', ''), ('', ''), ('', ''), ('', ''), ('', ''), ('', ''), ('', ''), ('', ''), ('', ''), ('', ''), ('', ''), ('+', '44'), ('', ''), ('', '787'), ('', ''), ('', '77950'), ('', ''), ('', ''), ('', ''), ('', ''), ('', ''), ('', ''), ('', ''), ('', ''), ('', ''), ('', ''), ('', ''), ('', ''), ('', ''), ('', ''), ('', ''), ('', ''), ('', ''), ('', '')]

为什么它表现得很奇怪?我该如何解决它?

编辑 - 我的示例不是最好的,我希望“+somenumber”是可选的 - 并非所有发送给我的电话号码都是国际电话号码,因此不必包含 + 号

很抱歉没有说清楚。

到目前为止,最接近我想要的似乎是

import re

r = re.compile(r'''(\+)?(\d+) # optional + sign for international calls
([" "-\)]{,1}\d+)+ # main chain of numbers, numbers separated by a space, ) or a hyphen
''',re.VERBOSE)
print(r.findall('+00 0000 0000 is my number and +44-787-77950 was my uk number'))

这给出了

[('+', '00', ' 0000'), ('+', '4', '4'), ('', '78', '7'), ('', '7795', '0')]

最佳答案

针对您的模式的快速修复是

\+?\d+(?:[- \)]+\d+)+

请参阅regex demo 。请注意,使用非捕获组有助于避免在 re.findall 调用的结果中创建元组列表。

详细信息

  • \+? - 可选(1 或 0)加号
  • \d+ - 1+ 位数字
  • (?: - 非捕获组的开始:
    • [- )]+ - 1 个或多个 -空格、)` 字符
    • \d+ - 1+ 位数字
  • )+ - 1 次或多次重复(整个 (?:...) 模式序列以这种方式量化,至少需要符号和数字一次并作为一个序列)。

Python demo :

import re
rx = r"\+?\d+(?:[- )]+\d+)+"
s = "+00 0000 0000 is my number and +44-787-77950 was my uk number"
print(re.findall(rx, s))
# => ['+00 0000 0000', '+44-787-77950']

关于python regex - 查找电话号码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50331489/

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