Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python正则表达式不匹配_Python_Regex - Fatal编程技术网

Python正则表达式不匹配

Python正则表达式不匹配,python,regex,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

这是其中的一件事,我肯定我错过了一些简单的事情,但是。。。在下面的示例程序中,我尝试使用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'

match
仅匹配字符串开头的内容。如果您改为
pct\r.search(line)
,您的代码工作正常。

您应该改为使用
re.findall

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

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

如果您确实想使用match,请尝试以下方法:

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

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

您可能想补充一点,
r'…'
是一个“原始”字符串,忽略了一些转义序列,这是python中与regexp一起使用的一个很好的实践。我知道这是一件微不足道的事情!谢谢大家的快速回复。