这是我确定我遗漏了一些简单的事情之一,但是......在下面的示例程序中,我正在尝试使用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'
答案 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(见下面的评论)