2

値のリストがあり、すべてに「pt」+ 2桁の部分が含まれています。しかし、その後に「_digitdigit」がある場合、この値は除外する必要があります。

一致する必要があります: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}] のようなものがうまくいくと思っていましたが、期待どおりに動作しません。

4

1 に答える 1

4

否定先読みアサーションを使用します(?!...)

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

このパターンは、アンダースコアと 2 桁の数字が続いていない場合にのみ、pt 2 桁の数字が続くパターンに一致します。

>>> 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
于 2012-04-25T15:40:52.643 に答える