首页 > 后端开发 > Python教程 > 为什么're.findall”返回空列表,而're.search”在 Python 3.4.3 中可以正确使用相同的模式和字符串?

为什么're.findall”返回空列表,而're.search”在 Python 3.4.3 中可以正确使用相同的模式和字符串?

Patricia Arquette
发布: 2024-12-22 20:57:10
原创
218 人浏览过

Why Does `re.findall` Return an Empty List While `re.search` Works Correctly with the Same Pattern and String in Python 3.4.3?

re.findall 行为异常

困境:

在使用 Python 3.4 的 Python 脚本中.3、重新搜索当使用指定模式应用于特定源字符串时,方法提供预期结果。然而,re.findall 莫名其妙地返回相同模式和源字符串的空列表。

探索:

奇怪的是,尽管 re.findall 方法似乎满足从基于字符串中提取匹配项的要求,但其行为却出乎意料

解决方案:

经过仔细检查,很明显有两个因素导致了这种奇怪的行为:

  • 模式构成:
    提供的模式包含有争议的表达, r'.',旨在匹配转义字符 () 后跟任何非换行符。但是,在 r'' 字符串文字的上下文中,此表达式尝试匹配文字 ,从而导致不正确的行为。
  • findall 行为:
    re. findall 方法期望模式包含捕获组。如果不存在捕获组,则返回空字符串。原始模式缺少捕获组,导致无法捕获所需的匹配项。

纠正模式:

为了缓解此问题并成功提取匹配项,以下纠正模式应该是就业:

-?\d*\.?\d+
登录后复制

解释:

  • -?: 可选减号
  • d *: 可选数字
  • .?: 可选小数分隔符
  • d : 一位或多位数字

演示:

利用修改后的模式, re.findall 方法现在可以准确检索预期的匹配列表:

['123', '3.1415926']
登录后复制

以上是为什么're.findall”返回空列表,而're.search”在 Python 3.4.3 中可以正确使用相同的模式和字符串?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板