应该使用适当的正则表达式来捕获下面列出的所有电话号码?我试过一个,它部分完成了工作。但是,我想把它们全部搞定。感谢您的任何建议或帮助。
以下是我尝试过的剧本编号:
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
答案 0 :(得分:3)
我建议强制使用正则表达式的某些部分(比如数字模式,将*
替换为+
),或者它可能与文本的无意义部分相匹配。另请注意,\s
匹配任何空格,而您最有可能希望匹配相同行上的字符串。
您可以尝试
\+?1? ?(?:\(?\d+\)?)?(?:[ -]?\d+){1,2}
请参阅regex demo
<强>详情
\+?
- 可选加1?
- 可选的1
?
- 和可选空间(?:\(?\d+\)?)?
- (
的可选序列,然后是1位数字,然后是可选的)
(?:[ -]?\d+){1,2}
- 1或2次出现:
[ -]?
- 可选空格或-
\d+
- 1+位数答案 1 :(得分:2)
我认为这个regx适合您的情况
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]