重复多个字符正则表达式
有没有办法使用正则表达式来匹配重复的字符集?例如:
ABCABCABCABCABC
ABC{5}
我知道那是错的。但是有什么可以匹配这种效果的吗?
更新:
您可以使用嵌套捕获组吗?像(?<cap>(ABC){5})
什么?
回答:
将要重复的正则表达式放在括号中。例如,如果您要重复5次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'
以上是 重复多个字符正则表达式 的全部内容, 来源链接: utcz.com/qa/416659.html