Python Findall找不到任何东西

时间:2019-02-06 18:08:17

标签: python regex

我正在学习正则表达式,并坚持使用以下代码:

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的匹配项。

我在做什么错?

4 个答案:

答案 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

  1. Python Demo

  2. Regex Demo & Explanation

答案 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])