清理一个有很多重复的正则表达式

时间:2014-09-29 16:44:21

标签: regex

我希望清理一个序列中一次匹配2个或更多字符的正则表达式。我做了一个有效的,但如果可能的话,我正在寻找更短的东西。

目前,对于我要搜索的每个字符,它看起来都是这样的:

([A]{2,}|[B]{2,}|[C]{2,}|[D]{2,}|[E]{2,}|...)*

示例输入:

AABBBBBBCCCCAAAAAADD

2 个答案:

答案 0 :(得分:0)

不确定我了解您的需求,但是,如何:

[A-E]{2,}

这与你的相同,但更短。

但是如果你想要每个字母多次出现:

(?:([A-Z])\1+)+

其中([A-Z])匹配一个大写字母并将其存储在组1中 \1是一个重复组1的反向引用 +假设是一次或多次重复 最后,它匹配您给出的字符串:AABBBBBBCCCCAAAAAADD

为了确保字符串中没有其他字符,您必须锚定正则表达式:

^(?:([A-Z])\1+)+$

并且,如果您想要匹配不区分大小写:

^(?i)(?:([A-Z])\1+)+$

答案 1 :(得分:0)

请参阅this question,我认为这是问你要问的问题。您想要编写一个匹配2个或更多相同字符的正则表达式。让我们说你要找的字符只是大写字母[A-Z]。您可以通过匹配该集合中的一个字符并将其放入括号中进行分组,然后使用引用\1匹配该组并说您想要两个或更多个" group"来实现此目的。 (这实际上只是它匹配的一个字符。)

([A-Z])\1{1,}

{1,}而非{2,}的原因是第一个字符已经与集合[A-Z]匹配。