分隔具有相同潜在起始字符的正则表达式模式匹配

2024-10-02 08:18:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我想有一个正则表达式,匹配同一行中的几个字符,在一个可能的字符范围内,但不返回这些模式匹配作为一个模式。如何做到这一点?你知道吗

澄清:

我想要一个以[a-c]开头的模式,并且不固定地返回相同字符的任何数字,但不返回范围内的其他字符。在序列“aafaabbybccc”中,它将找到以下模式:

(‘aa’、‘aa’、‘bb’、‘b’、‘cccc’)

但不包括以下内容:

('f'、'aabb'、'y'、'bcccc')

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


Tags: 函数顺序模式序列数字字符regexcccc
2条回答

您可以使用backreference \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']

问得好。使用正则表达式,如:

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

这是更强大的-你不局限于a-c,你可以取代它与a-z如果你喜欢。它首先将a-c中的任何字符定义为L,然后查看该字符是否再次出现一次或多次。您想使用这个正则表达式运行re.findall()。你知道吗

相关问题 更多 >

    热门问题