regex findall()只返回[]

2024-09-30 23:40:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试运行下面的行,并期望Python返回['402-292-2345'],但是我从Shell得到的只是'[]',就像下面的最后一行一样。我做错什么了?(注意:我编辑了下面的原始代码以反映缺少的破折号。)

后期编辑:出现了另外一个问题,我认为这与使用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的文本编辑器中。你知道吗


Tags: samplere编辑streetshellresume文本编辑compile
1条回答
网友
1楼 · 发布于 2024-09-30 23:40:57
phoneRegex = re.compile(r'\d\d\d-\d\d\d-\d\d\d\d')

此模式尝试匹配3个数字,然后是一个破折号,再匹配3个数字和一个破折号,最后再匹配4个数字。你知道吗

Regexp find将无法转换输入格式,只能通过它进行搜索。要匹配您指出的数字,请尝试以下regexp

"\d{3}-\d{7}"

(大括号可用于重复,使regexp更易于阅读)

编辑:对于更通用的解决方案(例如,您不知道确切的输入格式),您可以尝试这样的方法

(?:\d[\- ]?){10}

它将匹配一个由10个数字组成的字符串,可能用单个空格或破折号分隔某些/全部/无数字。你知道吗

括号后面看起来很有趣的?:将括号标记为不匹配,这本质上意味着将显示整个匹配项,而不仅仅是括号的内容。你知道吗

相关问题 更多 >