re.findall 行为不可预测
原始字符串和模式定义如下:
s = r'abc123d, hello 3.1415926, this is my book' pattern = r'-?[0-9]+(\.[0-9]*)?|-?\.[0-9]+'
re.findall search 可以准确地找到匹配项,而 re.findall 会产生一个空列表。这种行为与 ['123', '3.1415926'] 的预期输出相矛盾,引发了为什么 re.findall 不会产生此结果的问题。
理解问题
有两个关键考虑因素在起作用这里:
正则表达式修改
为了解决这个问题,我们可以修改模式以删除多余的捕获组并正确匹配数字:
pattern = r'-?\d*\.?\d+'
此模式将匹配:
结果
使用此修改后的模式,re.findall 将产生预期的输出:
import re L = re.findall(pattern, s) print(L) # Output: ['123', '3.1415926']
以上是为什么're.search”成功却're.findall”找不到字符串中的数字?的详细内容。更多信息请关注PHP中文网其他相关文章!