如何提取以相同方式开始的最长组?
例如,从给定的字符串中,我想要将最长匹配提取到CS或CSI。
我尝试了这个“(CS | CSI)。*”即使CSI可用,也会返回CS而不是CSI。
如果我做“(CSI | CS)。*”那么我确实得到了CSI,如果匹配,那么我认为解决方案是在较长的一个之后总是放置较短的重叠组。
有没有更明确的方式用re表达这个?不知何故,结果取决于您链接群组的顺序让人感到困惑。
答案 0 :(得分:3)
不,这就是它的工作原理,至少在Perl派生的正则表达式中,如Python,JavaScript,.NET等。
答案 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)
col\%[umn]
与col
中的color
,colum
中的columbus
和column
中的?
匹配。
我不知道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'