如何匹配连续不包含两位数的所有单词?

时间:2012-04-25 15:36:09

标签: python regex

我有值列表,每个都包含“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}]之类的东西可以解决这个问题,但它并没有像我预期的那样发挥作用。

1 个答案:

答案 0 :(得分: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