我希望RegEx能够在一系列可能的字符范围内连续匹配多个相同的字符,但不会将这些模式匹配作为一个模式返回。如何实现这一目标?
澄清:
我想要一个以[a-c]开头的模式,并且不同意地返回任意数量的相同字符,但不会返回该范围内的其他字符。在序列'aafaabbybcccc'中,它会找到以下模式:
('aa','aa','bb','b','cccc')
但会排除以下内容:
('f','aabb','y','bcccc')
我不想使用多个RegEx模式搜索,因为我找到模式的顺序将决定另一个函数的输出。这个问题是为了自学(python),而不是作业。 (我也不到15岁,但我会尽快回来并投票。)
答案 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']