重复多个字符正则表达式

Fal*_*rri 19 python regex

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

ABCABCABCABCABC

ABC{5}

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

更新:

你可以使用嵌套的捕获组吗?那样的东西(?<cap>(ABC){5})呢?

Bri*_*ell 40

在括号中包含要重复的正则表达式.例如,如果你想重复5次ABC:

(ABC){5}
Run Code Online (Sandbox Code Playgroud)

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

(ABC)*
Run Code Online (Sandbox Code Playgroud)

或者一个或多个重复:

(ABC)+
Run Code Online (Sandbox Code Playgroud)

编辑以响应更新

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

你可以嵌套括号; 他们是从第一个开放的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'
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

  • (ABC){3,5}也用于一系列重复 (4认同)
  • 我会使用+ here而不是*,因为*将匹配0次出现的(ABC). (2认同)

Zaf*_*fer 5

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

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

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