首页 > 后端开发 > Python教程 > 为什么在 Python 中匹配数字时 `re.findall` 返回空列表?

为什么在 Python 中匹配数字时 `re.findall` 返回空列表?

Barbara Streisand
发布: 2024-12-27 01:20:10
原创
785 人浏览过

Why Does `re.findall` Return an Empty List When Matching Numbers in Python?

re.findall 行为不一致

当尝试使用 re.findall 匹配字符串中的数值时,一些用户注意到了意外的行为。虽然 re.search 准确地检索匹配项,但 re.findall 返回一个空列表。这种明显的差异可归因于以下因素:

捕获组和 re.findall

要记住的一个关键点是,如果正则表达式模式包含捕获组。如参考文献中所定义,如果模式包含捕获组,则 re.findall 返回组列表,对于具有多个组的模式可能采用元组的形式。值得注意的是,即使是空匹配也会包含在输出中,除非它们紧接在另一个匹配之前。

非捕获组和文字转义

在提供的示例中,特定问题源于在 r'' 字符串文字中使用 \。此构造尝试匹配文字 ,而不是匹配任何单个字符(换行符除外)的预期含义。要正确匹配数值,应将模式修改为:

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

此模式包括以下捕获组:

  • -? - 可选减号
  • d* - 可选数字
  • 。 - 可选的小数分隔符
  • d - 一个或多个数字

演示

这是修改后的模式的 IDEONE 演示:

import re
s = r'abc123d, hello 3.1415926, this is my book'
pattern = r'-?\d*\.?\d+'
L = re.findall(pattern, s)
print(L)
登录后复制

此模式正确检索预期的数字匹配列表: ['123', '3.1415926'].

通过考虑捕获组的性质以及文字转义的适当用法,开发人员可以确保 re.findall 按其脚本中的预期运行。

以上是为什么在 Python 中匹配数字时 `re.findall` 返回空列表?的详细内容。更多信息请关注PHP中文网其他相关文章!

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