gpt4 book ai didi

python - 乌克兰电话号码的正则表达式模板

转载 作者:太空宇宙 更新时间:2023-11-03 20:19:34 25 4
gpt4 key购买 nike

我正在阅读“用 python 自动化无聊的事情”。现在,我陷入了第七章(正则表达式部分)。有一个美国电话号码模板,我想为乌克兰电话号码实现该模板。

乌克兰号码可以以不同的格式显示,例如:+380445371428、+38(044)5371428、+38(044)537 14 28、+38(044)537-14-28、+38(044) 537.14.28、044.537.14.28、0445371428、044-537-1428、(044)537-1428、044 537-1428等

以下是我的实现,但并不完全正确。我需要什么?

  • 当我复制一些网站页面时,我想从我复制的所有信息中提取以 (044-537-1428) 格式显示的乌克兰号码。
    phoneRegex = re.compile(r'''(
(^\+38?) # area code(not necessarily)
(\d{3}|\(\d{3}\)) # carrier code(usually starts with 0
(\s|-|\.)? # separator
(\d{3}|\(\d{3}\)) # first 3 digits
(\s|-|\.) # separator
(\d{4}) # last 4 digits
(\s*(ext|x|ext.)\s*(\d{2,5}))? # extension
)''', re.VERBOSE)

美国号码的模板(根据书本)如下所示

    phoneRegex = re.compile(r'''(
(\d{3}|\(\d{3}\))?
(\s|-|\.)
(\d{3})
(\s|-|\.)
(\d{4})
(\s*(ext|x|ext.)\s*(\d{2,5}))?
)''', re.VERBOSE)

最佳答案

也许,一个选项是根据我们可能拥有的模式类型合并交替,例如:

^(?:\+38)?(?:\(044\)[ .-]?[0-9]{3}[ .-]?[0-9]{2}[ .-]?[0-9]{2}|044[ .-]?[0-9]{3}[ .-]?[0-9]{2}[ .-]?[0-9]{2}|044[0-9]{7})$

如果我们要验证的话,甚至比这更受限制。

Demo

测试

import re

regex = r'^(?:\+38)?(?:\(044\)[ .-]?[0-9]{3}[ .-]?[0-9]{2}[ .-]?[0-9]{2}|044[ .-]?[0-9]{3}[ .-]?[0-9]{2}[ .-]?[0-9]{2}|044[0-9]{7})$'
string = '''

+380445371428
+38(044)5371428
+38(044)537 14 28
+38(044)537-14-28
+38(044) 537.14.28
044.537.14.28
0445371428
044-537-1428
(044)537-1428
044 537-1428
+83(044)537 14 28
088 537-1428

'''

print(re.findall(regex, string, re.M))

输出

['+380445371428', '+38(044)5371428', '+38(044)537 14 28', '+38(044)537-14-28', '+38(044) 537.14.28', '044.537.14.28', '0445371428', '044-537-1428', '(044)537-1428', '044 537-1428']

<小时/>

如果您想简化/修改/探索表达式,regex101.com 的右上角面板已对此进行了解释。 。如果您愿意,也可以在 this link 观看,它如何与一些示例输入相匹配。

<小时/>

正则表达式电路

jex.im可视化正则表达式:

enter image description here

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

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