Python 正则表达式 returns 与 re.findall 一起使用时匹配的一部分
Python regex returns a part of the match when used with re.findall
我一直在努力自学 Python,目前正在学习正则表达式。我一直在使用的说明文本似乎旨在教授 Perl 或其他一些不是 Python 的语言,因此我不得不稍微调整一下表达式以适应 Python。然而,我不是很有经验,而且我在尝试让表达式起作用时遇到了障碍。
该问题涉及在文本中搜索价格实例,以不带小数的 $500 或带小数的 $500.10 表示。
这是文字推荐的:
$[0-9]+(\.[0-9][0-9])?
复制文本,我使用这个代码:
import re
inputstring = "0.01"
result = re.findall( r'$[0-9]+(\.[0-9][0-9])?', inputstring)
if result:
print(result)
else:
print("No match.")
但是,结果不是 $500.01,而是:
.01
我觉得这很奇怪。如果我删除括号和可选的小数部分,它就可以正常工作。所以,使用这个:
$[0-9]+\.[0-9][0-9]
我得到:
0.01
如何将正则表达式设为 return 带小数部分和不带小数部分的值?
谢谢。
使用非捕获组:
result = re.findall( r'$[0-9]+(?:\.[0-9][0-9])?', inputstring)
^^
re.findall
函数 returns 捕获的文本列表(如果模式中有任何定义,并且您有一个)。你需要把它变成一个非捕获的来摆脱它。
re.findall(pattern, string, flags=0)
If one or more groups are present in the pattern, return a list of groups; this will be a list of tuples if the pattern has more than one group.
更新
您可以使用 限制量词 {2}
稍微缩短您的正则表达式,它需要正好出现 2 次前面的子模式:
r'$[0-9]+(?:\.[0-9]{2})?'
^^^
甚至用 \d
替换 [0-9]
:
r'$\d+(?:\.\d{2})?'
我一直在努力自学 Python,目前正在学习正则表达式。我一直在使用的说明文本似乎旨在教授 Perl 或其他一些不是 Python 的语言,因此我不得不稍微调整一下表达式以适应 Python。然而,我不是很有经验,而且我在尝试让表达式起作用时遇到了障碍。
该问题涉及在文本中搜索价格实例,以不带小数的 $500 或带小数的 $500.10 表示。
这是文字推荐的:
$[0-9]+(\.[0-9][0-9])?
复制文本,我使用这个代码:
import re
inputstring = "0.01"
result = re.findall( r'$[0-9]+(\.[0-9][0-9])?', inputstring)
if result:
print(result)
else:
print("No match.")
但是,结果不是 $500.01,而是:
.01
我觉得这很奇怪。如果我删除括号和可选的小数部分,它就可以正常工作。所以,使用这个:
$[0-9]+\.[0-9][0-9]
我得到:
0.01
如何将正则表达式设为 return 带小数部分和不带小数部分的值?
谢谢。
使用非捕获组:
result = re.findall( r'$[0-9]+(?:\.[0-9][0-9])?', inputstring)
^^
re.findall
函数 returns 捕获的文本列表(如果模式中有任何定义,并且您有一个)。你需要把它变成一个非捕获的来摆脱它。
re.findall(pattern, string, flags=0)
If one or more groups are present in the pattern, return a list of groups; this will be a list of tuples if the pattern has more than one group.
更新
您可以使用 限制量词 {2}
稍微缩短您的正则表达式,它需要正好出现 2 次前面的子模式:
r'$[0-9]+(?:\.[0-9]{2})?'
^^^
甚至用 \d
替换 [0-9]
:
r'$\d+(?:\.\d{2})?'