分离具有相同潜在起始字符的RegEx模式匹配

时间:2012-05-23 02:41:34

标签: python regex

我希望RegEx能够在一系列可能的字符范围内连续匹配多个相同的字符,但不会将这些模式匹配作为一个模式返回。如何实现这一目标?

澄清:

我想要一个以[a-c]开头的模式,并且不同意地返回任意数量的相同字符,但不会返回该范围内的其他字符。在序列'aafaabbybcccc'中,它会找到以下模式:

('aa','aa','bb','b','cccc')

但会排除以下内容:

('f','aabb','y','bcccc')

我不想使用多个RegEx模式搜索,因为我找到模式的顺序将决定另一个函数的输出。这个问题是为了自学(python),而不是作业。 (我也不到15岁,但我会尽快回来并投票。)

2 个答案:

答案 0 :(得分:2)

好问题。使用正则表达式:

(?P<L>[a-c])(?P=L)+

这更加强大 - 您不仅限于a-c,如果您愿意,可以将其替换为a-z。它首先将a-c中的任何字符定义为L,然后再查看该字符是否再次出现一次或多次。您想使用此正则表达式运行re.findall()

答案 1 :(得分:1)

您可以使用反向引用\1 - \9来捕获之前匹配的第1到第9组。

/([a-c])(\1+)/

[a-c]: Matches one of the character.
\1+  : Matches subsequent one or more previously matched character.

的Perl:

perl -e '@m = "ccccbbb" =~ /([a-c])(\1+)/; print $m[0], $m[1]'

cccc

的Python:

>>> import re
>>> [m.group(0) for m in re.finditer(r"([a-c])\1+", 'aafaabbybcccc')]
['aa', 'aa', 'bb', 'cccc']