Python正则表达式不匹配

时间:2013-07-16 15:21:43

标签: python regex

这是我确定我遗漏了一些简单的事情之一,但是......在下面的示例程序中,我正在尝试使用Python的RE库来解析字符串“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'

3 个答案:

答案 0 :(得分:18)

match仅匹配字符串的开头。如果你改为pct_re.search(line),你的代码就可以了。

答案 1 :(得分:5)

您应该使用re.findall代替:

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

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

答案 2 :(得分:2)

如果你真的想使用匹配,试试这个:

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

r'...'是一个“原始”字符串,忽略了一些转义序列,这是一个在python中与regexp一起使用的好习惯。 - kratenko(见下面的评论)