Python 无法捕获具有不同模式的特定电话号码

Python 无法捕获具有不同模式的特定电话号码,python,regex,python-3.x,Python,Regex,Python 3.x,要捕获下面列出的所有电话号码,适当的正则表达式应该是什么?我试过一个,它部分地起作用。但是,我想把它们都买下来。谢谢你的建议和帮助 以下是我尝试使用的脚本的数字: import re content=''' 415-555-1234 650-555-2345 (416)555-3456 202 555 4567 4035555678 1 416 555 9292 +1 416 555 9292 ''' for phone in re.findall(r'\+?1?\s?\(?\d*\)?[

要捕获下面列出的所有电话号码,适当的正则表达式应该是什么?我试过一个,它部分地起作用。但是,我想把它们都买下来。谢谢你的建议和帮助

以下是我尝试使用的脚本的数字:

import re

content='''  
415-555-1234
650-555-2345
(416)555-3456
202 555 4567
4035555678
1 416 555 9292
+1 416 555 9292
'''
for phone in re.findall(r'\+?1?\s?\(?\d*\)?[\s-]\d*[\s-]\d*',content):
  print(phone)
我得到的结果是:

415
-555-1234

650-555-2345
555-3456
202
 555 4567
4035555678

1 416 555
 9292

+1 416 555 9292

我认为这个正则表达式在你的情况下会起作用

import re
content = '''  
    415-555-1234
    650-555-2345
    (416)555-3456
    202 555 4567
    4035555678
    1 416 555 9292
    +1 416 555 9292
    '''
    for phone in re.findall(r'(([+]?\d\s\d?)?\d{3}[-\.\s]??\d{3}[-\.\s]??\d{4}|\(\d{3}\)\s*\d{3}[-\.\s]??\d{4}|\d{3}[-\.\s]??\d{4})', content):
        print phone[0]

我认为这个正则表达式在你的情况下会起作用

import re
content = '''  
    415-555-1234
    650-555-2345
    (416)555-3456
    202 555 4567
    4035555678
    1 416 555 9292
    +1 416 555 9292
    '''
    for phone in re.findall(r'(([+]?\d\s\d?)?\d{3}[-\.\s]??\d{3}[-\.\s]??\d{4}|\(\d{3}\)\s*\d{3}[-\.\s]??\d{4}|\d{3}[-\.\s]??\d{4})', content):
        print phone[0]

我建议将正则表达式的某些部分设置为必须的(比如数字模式,用
+
替换
*
),否则它可能会匹配文本中无意义的部分。另外,请注意,
\s
匹配任何空格,而您很可能希望匹配同一行上的字符串

你可以试试

\+?1? ?(?:\(?\d+\)?)?(?:[ -]?\d+){1,2}

详细信息

  • \+?
    -可选加号
  • 1?
    -可选的
    1
  • -和可选空格
  • (?:\(?\d+\)?)?
    -可选的
    )序列,然后是1+位,然后是可选的
  • (?:[-]?\d+{1,2}
    -1或2次出现:
    • [-]?
      -可选空格或
      -
    • \d+
      -1+位

我建议将正则表达式的某些部分设置为必须的(如数字模式,用
+
替换
*
),否则它可能会匹配文本中无意义的部分。另外,请注意,
\s
匹配任何空格,而您很可能希望匹配同一行上的字符串

你可以试试

\+?1? ?(?:\(?\d+\)?)?(?:[ -]?\d+){1,2}

详细信息

  • \+?
    -可选加号
  • 1?
    -可选的
    1
  • -和可选空格
  • (?:\(?\d+\)?)?
    -可选的
    )序列,然后是1+位,然后是可选的
  • (?:[-]?\d+{1,2}
    -1或2次出现:
    • [-]?
      -可选空格或
      -
    • \d+
      -1+位

试试
r'\+?1?\s?(?:\(?\d+\)?[\s-]?\d+(?:[\s-]?\d+)”
您是在更大、更嘈杂的环境中搜索这些数字,还是
内容的示例类似于您的真实场景,请参见a。您的问题的答案是否与创建一个合适的表达式@Jordan Bonitis有关?如果您的上下文与上述内容完全相同,我建议您完全不要使用表达式,只需在
\n
上拆分
内容
,然后去掉非数字,以使其正常化。在这一点上,您可以按自己喜欢的任何方式格式化它。
您是在更大、更嘈杂的环境中搜索这些数字,还是
内容的示例类似于您的真实场景,请参见a。您的问题的答案是否与创建一个合适的表达式@Jordan Bonitis有关?如果您的上下文与上述内容完全相同,我建议您完全不要使用表达式,只需在
\n
上拆分
内容
,然后去掉非数字,以使其正常化。在这一点上,你可以按照你喜欢的任何方式格式化它,作为你的答案。这个也行+谢谢纳齐尔·艾哈迈德,谢谢你的回答。这个也行+这是我的荣幸。