2016-05-30 19 views
2

RegExで特定の文字列を検索しようとしています。 私は「fで始まり、最初の2で終わる」(1つだけ2を含んでいなければならない)ものを見つけたいと思っています。この例では、result = "fdba12"が見つかりましたが、下のコードは私に'fdba12312'(2を2つ含む)を与えています。すぐに2を見つけたら、どうやって検索を止めることができますか?正規表現Findallが最初に検索を停止する

import re 
string2 = "asfdba12312 sssdr1 12şljş1 kf" 

t = re.findall(r'[f][\w]*[2]', string2) 
print(t) 
+1

または 'f [^ \ W2] * 2'です。 –

+1

関連[Python非貪欲な正規表現](http://stackoverflow.com/q/766372) –

答えて

1

問題は、あなたの正規表現はまた、隣接する2パターンを一致させることができます\w*パターンが含まれていることです。必要なものを実現するには2つの方法があります:1)rock321987によって提案された遅延量指定子を使用し、2)ネゲートされた文字クラス[^...]の中で逆順のcharクラスを使用し、また2を否定します。

したがって、

f[^\W2]*2 

を使用regex demo

[^\W2]*パターンがゼロ以上の非単語文字以外の文字(したがって、それはすべての単語文字に一致)と2以外に一致する参照。

注:欲張り一致は、ここでの遅延一致よりも速いです。

関連する問題