繁体   English   中英

重复多个字符正则表达式

[英]repeating multiple characters regex

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

ABCABCABCABCABC

ABC{5}

我知道那是错的。 但是有什么可以匹配这种效果的吗?

更新:

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

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

(ABC){5}

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

(ABC)*

或重复一次或多次:

(ABC)+

编辑以响应更新

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

你可以嵌套括号; 它们是从第一个开头括号开始计算的。 例如:

>>> 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'

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

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

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

(ABC){5}应该适合你

括号“()”用于将字符和表达式分组到更大、更复杂的正则表达式中。 紧跟在组后面的量词适用于整个组。

(ABC){5}

至于问题的更新-

您可以嵌套捕获组。 捕获组索引按打开的括号递增。

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

输入正则表达式 ABCABCABCDEFDEDFEF,捕获组 0 匹配整个事物,1 也是整个事物,2 是 ABCABCABC,3 是 ABC,4 是 DEF(因为星星在捕获组之外)。

如果您在捕获组内部有变化而在外部有重复,那么如果您没有预料到,事情可能会变得有点不稳定......

(a[bc]*c)*

当输入 abbbccccabbc 时,将返回最后一个匹配作为捕获组 1,在本例中只是 abbc,因为捕获组使用重复运算符重置。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM