python正则表达式,如何提取最长的重叠组

时间:2010-05-14 15:09:00

标签: python regex

如何提取以相同方式开始的最长组?

例如,从给定的字符串中,我想要将最长匹配提取到CS或CSI。

我尝试了这个“(CS | CSI)。*”即使CSI可用,也会返回CS而不是CSI。

如果我做“(CSI | CS)。*”那么我确实得到了CSI,如果匹配,那么我认为解决方案是在较长的一个之后总是放置较短的重叠组。

有没有更明确的方式用re表达这个?不知何故,结果取决于您链接群组的顺序让人感到困惑。

4 个答案:

答案 0 :(得分:3)

不,这就是它的工作原理,至少在Perl派生的正则表达式中,如Python,JavaScript,.NET等。

http://www.regular-expressions.info/alternation.html

答案 1 :(得分:0)

有兴趣知道这样做的正确方法,如果它可以帮助你总是建立你的正则表达式,如:

import re

string_to_look_in = "AUHDASOHDCSIAAOSLINDASOI"
string_to_match = "CSIABC"

re_to_use = "(" + "|".join([string_to_match[0:i] for i in range(len(string_to_match),0,-1)]) + ")"

re_result = re.search(re_to_use,string_to_look_in)

print string_to_look_in[re_result.start():re_result.end()]

答案 2 :(得分:0)

vim编辑器中存在类似的功能(“任选匹配的原子的序列”),其中例如, col\%[umn]col中的colorcolum中的columbuscolumn中的?匹配。

我不知道python中是否有类似的功能, 您可以使用嵌套的匿名组,每个组后跟>>> import re >>> words = ['color', 'columbus', 'column'] >>> rex = re.compile(r'col(?:u(?:m(?:n)?)?)?') >>> for w in words: print rex.findall(w) ['col'] ['colum'] ['column'] 量词,为:

{{1}}

答案 3 :(得分:0)

正如Alan所说,模式将按照您指定的顺序进行匹配。

如果要匹配最长的重叠文字字符串,则需要最长的字符串才能显示。但是,如果您愿意,可以自动组织最长到最短的字符串:

>>> '|'.join(sorted('cs csi miami vice'.split(), key=len, reverse=True))
'miami|vice|csi|cs'