如何在python中使用正则表达式匹配可选的完整电话号码

2024-09-23 22:27:31 发布

您现在位置:Python中文网/ 问答频道 /正文

这是我第一次在经过长时间的搜索后在这里询问解决方案,我想告诉你,从现在起,我一直在为我的具体案例努力寻找解决方案,或者我错过了,但至少我会为你提供你需要的所有信息。我已经找到并阅读了许多可能的方法来解决我的python正则表达式,但我只找到了用于孤立数字、字符或符号的正则表达式,而不是用于简单特定格式的整个电话号码

我将把文本的内容格式放在这里,我试图从中提取姓名、他们的电话号码和电子邮件地址(很抱歉没有格式化,但我不知道如何在代码区换行):

很多文字。。。名字1 0723-111-222email@address1.com…大量文本
很多文字。。。第二个名字2 0723-333-444…大量文本
很多文字。。。第三名3email@address3.com…大量文本
很多文字。。。第四名4 0723-777-888email@address4.com…大量文本
很多文字。。。第五名5 0723-999-000email@address5.com…大量文本

我要提取的文本序列如下First Name1 0723-111-222 email@address1.com等等。现在我有一个正则表达式,它实际上成功地实现了这一点,但有一个例外。正如您在上面的文本示例中所看到的,我还有一个字符串没有电子邮件地址,另一个字符串没有电话号码。因此,成功提取了没有电子邮件地址的字符串,但没有提取缺少电话号码的字符串,并且脚本输出中没有打印

我运行的正则表达式是这样的,我很快就能得到我想要的:

'\w+s?\w+s?\w+\s\w+\s(?:\d+\-\d+\-\d+)?\s(?:[A-Za-z0-9\.\-+_*]+@[a-z0-9\.\-+_]+\.[a-z]+)?'

运行脚本后,输出如下所示:

名字1 0723-111-222email@address1.com
第二个名字2 0723-333-444
第四名4 0723-777-888email@address4.com
第五名5 0723-999-000email@address5.com

因此,主要问题在于regex的(?:\d+\-\d+\-\d+)?序列没有在输出中打印Third Name3 email@address3.com。在缺少电话号码的情况下,我需要向正则表达式添加哪些可选内容

很抱歉这么长的描述,但我想提供足够的信息让您了解问题所在


Tags: 字符串文本com信息内容电子邮件地址格式
1条回答
网友
1楼 · 发布于 2024-09-23 22:27:31

你可以用

\w+\s+\w+(?:(?:\s\d+-\d+-\d+)?\s+[A-Za-z0-9.+_*-]+@[a-z0-9.+_-]+\.[a-z]+|\s\d+-\d+-\d+)

regex demo

该模式基本上遵循以下逻辑:<WORD> <WORD1> (optional_NUMBER EMAIL|NUMBER)

详细信息

  • \w+\s+\w+-一个或多个单词字符、一个或多个空格以及一个或多个单词字符(两个空格分隔的“单词”)
  • (?:-启动非捕获组:
    • (?:\s\d+-\d+-\d+)?\s+[A-Za-z0-9.+_*-]+@[a-z0-9.+_-]+\.[a-z]+-可选出现空格、一个或多个数字、一个或多个数字、一个或多个数字、一个或多个空格、一个或多个字符ASCII字母、数字、.+_*-字符、@、一个或多个小写字母、数字、.、^}_-字符、.和一个或多个小写ASCII字母
    • |-或
    • \s\d+-\d+-\d+-空白,一个或多个数字,-,一个或多个数字,-,一个或多个数字
  • )-非捕获组的结尾

注意

相关问题 更多 >