我正在学习正则表达式,并坚持使用以下代码:
import re
resume = '''
(738) 383-5729
(373) 577-0492
(403) 443-2759
(375) 880-8576
(641) 576-2342
(951) 268-8744
'''
phoneRegex = re.compile(r'\d')
mo = phoneRegex.findall(resume)
print(mo.group())
当我尝试使用search
而不是findall
时,它可以工作。但是找不到与findall
的匹配项。
我在做什么错?
答案 0 :(得分:4)
findall()
返回一个简单的与模式匹配的字符串列表。
它没有group()
方法,只是省略了:
>>> print(mo)
['7', '3', '8', '3', '8', '3', '5', '7', '2', '9', '3', '7', '3', '5', '7',
'7', '0', '4', '9', '2', '4', '0', '3', '4', '4', '3', '2', '7', '5', '9',
'3', '7', '5', '8', '8', '0', '8', '5', '7', '6', '6', '4', '1', '5', '7',
'6', '2', '3', '4', '2', '9', '5', '1', '2', '6', '8', '8', '7', '4', '4']
答案 1 :(得分:1)
您似乎正在尝试匹配resume
中的电话号码,因此可以使用:
resume = '''
(738) 383-5729
(373) 577-0492
(403) 443-2759
(375) 880-8576
(641) 576-2342
(951) 268-8744
'''
mo = re.findall(r'\(\d{3}\) \d{3}-\d{4}', resume)
for x in mo:
print(x)
输出:
(738) 383-5729
(373) 577-0492
(403) 443-2759
(375) 880-8576
(641) 576-2342
(951) 268-8744
答案 2 :(得分:1)
由于(看起来)您只是想输入数字,因此您可以执行类似的操作
>>> [''.join(c for c in l if c in '0123456789') for l in resume.strip().splitlines()]
['7383835729', '3735770492', '4034432759', '3758808576', '6415762342', '9512688744']
这可以为您省去国际化数字(例如+46-(0)7-08/123 456
之类的麻烦)。
答案 3 :(得分:-2)
Re.findall()
模块在您要逐行迭代时使用,它将返回所有未分组的匹配项的列表。
所以在您的情况下,它作为列表返回
print(mo[0])