首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >乌克兰电话号码regex模板

乌克兰电话号码regex模板
EN

Stack Overflow用户
提问于 2019-10-05 12:47:00
回答 3查看 5.8K关注 0票数 0

我正在读“用python自动处理无聊的东西”。现在,我被困在第7章(Regex部分)。有一个美国电话号码的模板,我想为乌克兰的电话号码实现它。

乌克兰数字可以以不同格式出现,如:+380445371428,+38( 044 )5371428,+38(044)537 14 28,+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)格式。
代码语言:javascript
运行
复制
    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)

美国数字模板(根据这本书)如下所示

代码语言:javascript
运行
复制
    phoneRegex = re.compile(r'''(
    (\d{3}|\(\d{3}\))? 
    (\s|-|\.)
    (\d{3})
    (\s|-|\.)
    (\d{4})
    (\s*(ext|x|ext.)\s*(\d{2,5}))?
    )''', re.VERBOSE)
EN

回答 3

Stack Overflow用户

发布于 2019-10-05 20:39:06

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

代码语言:javascript
运行
复制
^(?:\+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})$

或者更严格的限制,如果我们能确认。

演示

测试

代码语言:javascript
运行
复制
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的右上面板中已经解释了该表达式。如果您愿意的话,您也可以在此链接中观察它如何与一些示例输入相匹配。

RegEx电路

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

票数 1
EN

Stack Overflow用户

发布于 2020-03-24 09:06:47

以下是我对所有乌克兰数字的判断:

代码语言:javascript
运行
复制
^\+?3?8?(0[\s\.-]\d{2}[\s\.-]\d{3}[\s\.-]\d{2}[\s\.-]\d{2})$

这样可以:

  • +380 XX XXX XX XX XX或
  • +380-XX-XXX-XX-XX

或没有“加号”的相同

票数 0
EN

Stack Overflow用户

发布于 2019-10-05 18:50:11

我不熟悉python,但我认为遵循regex可以解决您的问题。

代码语言:javascript
运行
复制
((\+38)?\(?\d{3}\)?[\s\.-]?(\d{7}|\d{3}[\s\.-]\d{2}[\s\.-]\d{2}|\d{3}-\d{4}))

您可以检查它是否工作这里

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58248441

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档