re.findall 错误行为:不需要的空结果
在给定的场景中,虽然 re.search() 成功提取了预期的数值“ 123" 从源字符串,re.findall() 意外地产生了一个空结果。
经调查,罪魁祸首是r'\.'正则表达式模式的一部分。在原始字符串(以 r 为前缀)中,\ 按字面意思处理,匹配反斜杠字符后跟除换行符之外的任何字符。但是,这不是捕获浮点数的预期行为。
为了纠正该问题,更正后的模式 -?d*.?d 遵循以下原则:
使用此修订后的模式,re.findall() 现在可以正确识别源字符串中的数值:
import re s = r'abc123d, hello 3.1415926, this is my book' pattern = r'-?\d*\.?\d+' L = re.findall(pattern, s) print(L) # Output: ['123', '3.1415926']
请记住,要使 re.findall() 返回不捕获组的匹配值,模式必须不含任何捕获组或非捕获组(例如,(?:)),除非模式中存在反向引用。
以上是为什么在 Python 中匹配浮点数时 re.findall() 返回空结果?的详细内容。更多信息请关注PHP中文网其他相关文章!