如果 re.findall() 函数在以下情况下未返回预期结果,则可能会造成混乱:匹配一个字符串。让我们探讨一下其在特定情况下行为背后的原因。
考虑以下源字符串:
s = r'abc123d, hello 3.1415926, this is my book'
并且以下模式:
pattern = r'-?[0-9]+(\.[0-9]*)?|-?\.[0-9]+'
通过 re.search,我们得到了正确的结果结果:
m = re.search(pattern, s) print(m) # <_sre.SRE_Match object; span=(3, 6), match='123'>
但是,re.findall 返回一个空列表:
L = re.findall(pattern, s) print(L) # []
有两个的关键方面考虑:
要正确匹配数值,请改用以下模式:
pattern = r'-?\d*\.?\d+'
此模式匹配:
使用此更正后的模式,re.findall 将返回预期列表:
['123', '3.1415926']
以上是为什么当 `re.search()` 找到匹配项时 `re.findall()` 返回空列表?的详细内容。更多信息请关注PHP中文网其他相关文章!