2012-04-25 18 views
2

私は値のリストを持っていて、すべてが "pt" + 2桁の部分を含んでいます。しかし、その後に "_digitdigit"があるならば、この値は除外されるべきです。行に2桁の数字が含まれていないすべての単語を一致させるにはどうすればよいですか?

が一致している必要があります:data_pt01_pr, data_pt02_1_pr, data_pt02_2

と一致しないでください。data_pt01_01_pr, data_pt22_22, data_pt01_00_ABCD_1_bk_vi

私は、トリックを行いますが、私は期待どおりに動作しません[^ \ dの{2}]のようなものを考えていました。このパターンは2桁それらは下線と2桁の数字が続いていないだけ場合続いptに一致する

pattern = r'pt\d\d(?!_\d\d)' 

+0

下線文字を考慮していないため、おそらく動作しません。 –

答えて

4

は否定先読みアサーション(?!...)を使用してください。

>>> p = re.compile(pattern) 
>>> bool(p.search("data_pt01_pr")) 
True 
>>> bool(p.search("data_pt02_2")) 
True 
>>> bool(p.search("data_pt01_01_pr")) 
False 
>>> bool(p.search("data_pt22_22")) 
False 
+0

ありがとう!だから、これは「スムーズではない」と「スムーズではない」というものを見つけるようなすべてのタスクにとって唯一の方法です。 – Francheska

+0

はい。しかし、一般的に "ネガティブパターン"の正規表現を書くのは難しいことに注意してください。参照:http://stackoverflow.com/questions/1611853/regular-expression-problem-in-java/1611938#1611938 –

関連する問題