重复多个字符正则表达式

时间:2010-09-02 20:30:24

标签: python regex

有没有办法使用正则表达式来匹配重复的字符集?例如:

ABCABCABCABCABC

ABC{5}

我知道这是错的。但有什么能与这种效果相匹配吗?

更新

您可以使用嵌套捕获组吗?那么像(?<cap>(ABC){5})

5 个答案:

答案 0 :(得分:37)

将要重复的正则表达式括在括号中。例如,如果您想要重复ABC

(ABC){5}

或者如果您想要任意数量的重复(0或更多):

(ABC)*

或者一次或多次重复:

(ABC)+

修改以响应更新

正则表达式中的括号做两件事;它们将正则表达式中的一系列项组合在一起,以便您可以将运算符应用于整个序列而不是最后一项,并且它们捕获该组的内容,以便您可以提取与该子表达式匹配的子字符串在正则表达式。

你可以嵌套括号;他们是从第一个开放的paren算起来的。例如:

>>> re.search('[0-9]* (ABC(...))', '123 ABCDEF 456').group(0)
'123 ABCDEF'
>>> re.search('[0-9]* (ABC(...))', '123 ABCDEF 456').group(1)
'ABCDEF'
>>> re.search('[0-9]* (ABC(...))', '123 ABCDEF 456').group(2)
'DEF'

如果您想在分组时避免捕获,可以使用(?:。如果您不想使用仅用于将序列组合在一起的括号,以便应用运算符来更改匹配的编号,这将非常有用。它也更快。

>>> re.search('[0-9]* (?:ABC(...))', '123 ABCDEF 456').group(1)
'DEF'

因此,要回答您的更新,是的,您可以使用嵌套捕获组,甚至可以避免使用内部组捕获:

>>> re.search('((?:ABC){5})(DEF)', 'ABCABCABCABCABCDEF').group(1)
'ABCABCABCABCABC'
>>> re.search('((?:ABC){5})(DEF)', 'ABCABCABCABCABCDEF').group(2)
'DEF'

答案 1 :(得分:3)

(ABC){5}应该适合你

答案 2 :(得分:3)

ABC {5}与ABCCCCC相匹配。要匹配5个ABC,您应该使用(ABC){5}。括号用于对一组字符进行分组。您还可以设置与ABCABCABC,ABCABCABCABC和ABCABCABCABCABC匹配的(ABC){3,5}等出现间隔。

(ABC){1,}表示1次或更多次重复,与(ABC)+完全相同。

(ABC){0,}表示0次或更多次重复,与(ABC)*完全相同。

答案 3 :(得分:1)

圆括号“()”用于在更大,更复杂的正则表达式中对字符和表达式进行分组。紧随该小组的量词适用于整个小组。

(ABC){5}

答案 4 :(得分:0)

关于问题的更新 -

您可以嵌套捕获组。捕获组索引每个打开的paren增加。

(((ABC)*)(DEF)*)

提供正则表达式ABCABCABCDEFDEFDEF,捕获组0匹配整个事物,1也是全部,2是ABCABCABC,3是ABC,4是DEF(因为星号在捕获组之外)。

如果你在捕获组中有变异而在外面有重复,那么如果你不期待它就会变得有点不可思议......

(a[bc]*c)*

当输入abbbcccabbc将 last 匹配作为捕获组1返回时,在此示例中仅为abbc,因为捕获组将使用repeat运算符重置。