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)'

仅当后面没有下划线和两位数字时,此模式才匹配pt后跟两位数字。

>>> 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 回答