Python正则表达式前瞻

时间:2017-04-26 12:50:24

标签: python regex python-2.7

尝试创建一个正则表达式,找到一些字母组​​合后跟数字。 和ABC123一样,它可能是ABC 123,ABCID:123

reg = re.compile('(ABC(?:ID\:| )?\d*?)(?:$| |,|\t)',re.IGNORECASE)

这样可行,但它本身也能找到ABC ..

如果后跟数字,是否只能找到它?

提前致谢

2 个答案:

答案 0 :(得分:1)

您使用*?量词与\d,并匹配 0 或更多数字(尽可能少)。

您可以使用

r'ABC(?:ID:| )?\d+'

r'[a-z]+(?:ID:| )?\d+'

请参阅regex demo

<强>详情:

  • ABC - ABC子字符串(或[a-z]+以匹配1个或多个ASCII字母(请注意,使用re.I标记编译模式将启用[a-z]也可以匹配大写的ASCII字母))
  • (?:ID:| )? - 1次或0次ID:或空格
  • \d+ - 1位数(+是一个贪婪的量词,因此无需使用(?:$| |,|\t)组定义右手上下文。)

请注意,如果您计划在Python 2.x中匹配Unicode字母,则需要使用

re.findall(r'[^\W\d_]+(?:ID:| )?[0-9]+', s, flags=re.U|re.I)

re.U标志将使\W\d类符合Unicode。

答案 1 :(得分:1)

您可以使用:

r"ABC(?:ID)?[ :]?\d+"

enter image description here

Demo