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+位,然后是可选的(
)
-1或2次出现:(?:[-]?\d+{1,2}
-可选空格或[-]?
-
-1+位\d+
+
替换*
),否则它可能会匹配文本中无意义的部分。另外,请注意,\s
匹配任何空格,而您很可能希望匹配同一行上的字符串
你可以试试
\+?1? ?(?:\(?\d+\)?)?(?:[ -]?\d+){1,2}
见
详细信息
-可选加号\+?
-可选的1?
1
-和可选空格?
-可选的(?:\(?\d+\)?)?
)序列,然后是1+位,然后是可选的(
)
-1或2次出现:(?:[-]?\d+{1,2}
-可选空格或[-]?
-
-1+位\d+
r'\+?1?\s?(?:\(?\d+\)?[\s-]?\d+(?:[\s-]?\d+)”
您是在更大、更嘈杂的环境中搜索这些数字,还是内容的示例类似于您的真实场景,请参见a。您的问题的答案是否与创建一个合适的表达式@Jordan Bonitis有关?如果您的上下文与上述内容完全相同,我建议您完全不要使用表达式,只需在\n
上拆分内容
,然后去掉非数字,以使其正常化。在这一点上,您可以按自己喜欢的任何方式格式化它。
您是在更大、更嘈杂的环境中搜索这些数字,还是内容的示例类似于您的真实场景,请参见a。您的问题的答案是否与创建一个合适的表达式@Jordan Bonitis有关?如果您的上下文与上述内容完全相同,我建议您完全不要使用表达式,只需在\n
上拆分内容
,然后去掉非数字,以使其正常化。在这一点上,你可以按照你喜欢的任何方式格式化它,作为你的答案。这个也行+谢谢纳齐尔·艾哈迈德,谢谢你的回答。这个也行+这是我的荣幸。