2013-07-16 8 views
7

これは私が何かシンプルなものを見逃していると思われるものの1つですが、以下のサンプルプログラムではPythonのREライブラリを使用して、パーセント記号の直前の浮動小数点数、すなわち "90.31"を得るために "行"を使用します。しかし、コードは常に "no match"を出力します。Pythonの正規表現が一致しない

他の正規表現もいくつか試してみましたが、すべて同じ結果が得られました。私は何が欠けていますか?

#!/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

私はそれが些細なことだったことを知っていた!迅速で有益な返信をいただき、ありがとうございます。 – Matt

答えて

15

match文字列のみのを開始から一致しました。代わりにpct_re.search(line)を実行するとコードが正常に動作します。

4

代わりre.findallを使用する必要があります。

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

re.matchは、文字列の先頭にマッチします。だから完全な文字列のための正規表現を構築する必要があります。

2

あなたが本当に試合を使用する場合は、この方法を試してください。

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

R「...」Pythonで正規表現を使用することをお勧めしますいくつかのエスケープシーケンスを無視して 『生』の文字列です。 - kratenko(下のコメントを参照)

+0

'r '...''はいくつかのエスケープシーケンスを無視した "生の"文字列であることを追加したいかもしれません。これはpythonでregexpを使う良い習慣です。 – kratenko

関連する問題