我正在尝试运行以下行,并期望Python返回['402-292-2345'],但我从Shell获得的所有内容都是'[]',就像下面的最后一行一样。我究竟做错了什么? (注意:我编辑了下面的原始代码以反映缺失的破折号。)
LATER EDIT:出现了另外一个问题,我认为这与使用IDLE的文本编辑器并从那里运行Shell有关。 在您的几条评论之后,我直接在Shell中运行了下面的行,并在
下面返回#2从文本编辑器中删除它:
phoneRegex = re.compile(r'\d\d\d-\d\d\d-\d\d\d\d')
resume = '''IM A SAMPLE 1234 North 55 Street Bellevue, Nebraska 68005 402-292-2345 iasample@aol.com PROFESSIONAL REFERENCES Name Attaboy Company'''
phoneRegex.findall(resume)
[]
然后#2我直接在Shell中运行它:
phoneRegex = re.compile(r'\d\d\d-\d\d\d-\d\d\d\d')
resume = '''IM A SAMPLE 1234 North 55 Street Bellevue, Nebraska 68005 402-292-2345 iasample@aol.com PROFESSIONAL REFERENCES Name Attaboy Company'''
phoneRegex.findall(resume)
返回 ['402-292-2345']如预期的那样。
所以,这直接在Shell中运行,但在IDLE的文本编辑器中没有。
答案 0 :(得分:3)
phoneRegex = re.compile(r'\d\d\d-\d\d\d-\d\d\d\d')
此模式试图匹配3个数字,然后是短划线,3个数字和短划线,最后是4个数字。
Regexp find将无法转换输入格式,只能搜索它。要匹配您指出的数字,请尝试以下正则表达式
"\d{3}-\d{7}"
(可以使用大括号进行重复,使正则表达式更容易阅读)
编辑:对于更通用的解决方案(例如,您不知道确切的输入格式),您可以尝试这样的事情
(?:\d[\- ]?){10}
这将匹配一个10位数的字符串,可能是单个空格或破折号分隔部分/全部/全部数字。
括号后面有趣的?:
将括号标记为不匹配,这实际上意味着将显示整个匹配,而不仅仅是括号内容。