正则表达式OR语句没有匹配

时间:2012-08-14 21:35:13

标签: python regex

我有这个正则表达式来匹配这两种可能性之一:

(\b(Q|L[A-Z])\d{8}\b)

# Possibilities
LK10652174
Q10652174

现在的结果是:

>>> regex.findall(string)
[(u'LK10652175', u'LK')]

我不希望它选择额外的LK匹配,是否有办法在没有获得额外选择的情况下封装OR语句?

3 个答案:

答案 0 :(得分:1)

是的,使用非捕获括号(并删除最外面的括号,您不需要它们):

\b(?:Q|L[A-Z])\d{8}\b

答案 1 :(得分:1)

与往常一样,(?:...)会匹配但不会捕获。

(\b(?:Q|L[A-Z])\d{8}\b)

答案 2 :(得分:-1)

来自python docs:

  

当一个模式完全匹配时,接受该分支。这个   意味着一旦A匹配,B将不会被进一步测试,即使它   会产生更长的整体比赛。换句话说,'|'操作者   从来都不贪心。

这意味着您需要像这样编写它以确保匹配是您想要的整个字符串:

import re
a = re.compile("(Q\\d{8}|L[A-Z]\\d{8})")
print a.findall("LK10652174 Q10652174")
['LK10652174', 'Q10652174']