当前位置: 首页 > 面试题库 >

重复多个字符正则表达式

都沈浪
2023-03-14
问题内容

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

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'


 类似资料:
  • 我的正则表达式是 当我在java中使用Pattern.complie()编译时,我得到了*非法重复字符* 我测试了这个正则表达式 当我编译这个时,它没有显示错误。 为什么会发生这种情况?

  • 所以我有一个字符串 我只想捕获字母数字值。我的正则表达式是 但它将返回 。我的代码如下所示: 想找到正则表达式答案。不String.replace全部()或替换():)

  • 我有一个代码,使用一些逻辑生成一些单词,我有正则表达式1(见下文)。但是我需要生成正确的单词,例如单词1。我的逻辑包括我提到的数学模式。我需要正确的模式来生成单词,例如单词1而不是2。模式的逻辑是: 该单词以大写元音或辅音开头 长度为(整个单词的)2个或更多符号 一行不应超过两个元音或辅音 等等 这些是单词 1 这是正则表达式 1 这个正则表达式不起作用,我的代码逻辑生成了下一个单词: 这些是单词

  • 我有一根绳子: 我想将所有字符(#,)替换为(#),因此例外的输出是: 注意:我不知道字符串中有多少(#)或(#)序列 我尝试的是: 我试着写: 但结果是: 我的在线尝试 我尝试将(*)用于序列,但没有成功: 那么我如何才能得到我的例外输出?

  • 但是抓住 以重复的方式?

  • 如何提取所有字符(包括换行符),直到第一次出现单词序列?例如以下输入: 输入文本: 和序列我想从中提取文本到第二行中第一次出现的。 输出必须为- 我整个上午都在努力。我可以编写表达式来提取所有字符,直到遇到特定字符,但如果我使用这样的表达式: 跨换行符不匹配。