2014-09-29 23 views
1

我正在寻找清理一个正则表达式,该正则表达式在一个序列中一次匹配两个或多个字符。我做了一个可行的工作,但如果可能的话,我正在寻找更短的工作。清理有很多重复的正则表达式

目前,它看起来像这样的,我想搜索的每一个字符:

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

例输入:

AABBBBBBCCCCAAAAAADD 
+0

最新的输出? – vks 2014-09-29 16:46:18

+0

对我来说不清楚。解释你的问题。 – 2014-09-29 16:51:48

回答

0

this question,我认为是问你也在问同样的事情。你想写一个匹配2个或更多相同字符的正则表达式。假设您要查找的字符只是大写字母,[A-Z]。您可以通过匹配该集合中的一个字符并将它分组到括号中进行分组,然后使用参考\1匹配该组,并说您想要两个或更多“该组”(它实际上只是它的一个字符)匹配)。

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

{1,}而不是{2,}的原因是第一个字符已经由一组[A-Z]匹配。

+0

我认为它会是'([A-Z])\ 1 {1,}' – 2014-09-29 16:57:43

+0

这不会是*一个或多个字符吗? – 2014-09-29 17:00:07

+0

啊,没关系,你是对的!编辑。 – 2014-09-29 17:01:54

0

不知道我理解你的需求,但是,怎么样:

[A-E]{2,} 

这和你的一样,但更短。

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

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

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

待定确保有是字符串中没有其他字符,你必须锚定的正则表达式:

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

而且,如果你wnat匹配不区分大小写:

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

这一个将不起作用。 – HuStmpHrrr 2014-09-29 17:02:51

+0

这是一个很好的尝试,我的问题措辞不是特别好。 – ChrisWard1000 2014-09-29 17:08:01

+0

灾难性的回溯....'AAAAAAAAAAAA1' – Unihedron 2014-09-30 15:22:28