Python正则表达式不匹配

2024-05-20 00:00:40 发布

您现在位置:Python中文网/ 问答频道 /正文

这是其中之一,我肯定我错过了一些简单的东西,但是。。。在下面的示例程序中,我试图使用Python的RE-library来解析字符串“line”,以获得百分号前面的浮点数,即“90.31”。但代码总是显示“不匹配”。

我也尝试过其他一些正则表达式,结果都是一样的。我错过了什么?

#!/usr/bin/python
import re
line = '    0 repaired, 90.31% done'
pct_re = re.compile(' (\d+\.\d+)% done$')
#pct_re = re.compile(', (.+)% done$')
#pct_re = re.compile(' (\d+.*)% done$')
match = pct_re.match(line)
if match: print 'got match, pct=' + match.group(1)
else: print 'no match'

Tags: 字符串代码程序re示例usrmatchline
3条回答

match仅从字符串的开始匹配。如果您改为pct_re.search(line),则代码可以正常工作。

如果确实要使用match,请尝试此操作:

re.match(r'.*(\d+\.\d+)% done$', line)

r'…'是一个“原始”字符串,忽略了一些转义序列,这是在python中与regexp一起使用的一个良好实践。–kratenko(见下文评论)

您应该使用re.findall代替:

>>> line = '    0 repaired, 90.31% done'
>>> 
>>> pattern = re.compile("\d+[.]\d+(?=%)")
>>> re.findall(pattern, line)
['90.31']

re.match将在字符串的开头匹配。所以您需要为完整字符串构建正则表达式。

相关问题 更多 >