[英]Python regular expression not matching
這是我確定缺少簡單的東西之一,但是...在下面的示例程序中,我試圖使用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_re.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一起使用的好習慣。 –克拉滕科(見下面的評論)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.