我正在寻找清理一个正则表达式,该正则表达式在一个序列中一次匹配两个或多个字符。我做了一个可行的工作,但如果可能的话,我正在寻找更短的工作。清理有很多重复的正则表达式
目前,它看起来像这样的,我想搜索的每一个字符:
([A]{2,}|[B]{2,}|[C]{2,}|[D]{2,}|[E]{2,}|...)*
例输入:
AABBBBBBCCCCAAAAAADD
我正在寻找清理一个正则表达式,该正则表达式在一个序列中一次匹配两个或多个字符。我做了一个可行的工作,但如果可能的话,我正在寻找更短的工作。清理有很多重复的正则表达式
目前,它看起来像这样的,我想搜索的每一个字符:
([A]{2,}|[B]{2,}|[C]{2,}|[D]{2,}|[E]{2,}|...)*
例输入:
AABBBBBBCCCCAAAAAADD
见this question,我认为是问你也在问同样的事情。你想写一个匹配2个或更多相同字符的正则表达式。假设您要查找的字符只是大写字母,[A-Z]
。您可以通过匹配该集合中的一个字符并将它分组到括号中进行分组,然后使用参考\1
匹配该组,并说您想要两个或更多“该组”(它实际上只是它的一个字符)匹配)。
([A-Z])\1{1,}
它{1,}
而不是{2,}
的原因是第一个字符已经由一组[A-Z]
匹配。
我认为它会是'([A-Z])\ 1 {1,}' – 2014-09-29 16:57:43
这不会是*一个或多个字符吗? – 2014-09-29 17:00:07
啊,没关系,你是对的!编辑。 – 2014-09-29 17:01:54
不知道我理解你的需求,但是,怎么样:
[A-E]{2,}
这和你的一样,但更短。
但是如果你想每个字母多次出现:
(?:([A-Z])\1+)+
其中([A-Z])
匹配一个大写字母,并将其存储在第1组
\1
是重复组1
+
认为是一个反向引用或更多的重复
最后它会匹配您所给予的字符串:AABBBBBBCCCCAAAAAADD
待定确保有是字符串中没有其他字符,你必须锚定的正则表达式:
^(?:([A-Z])\1+)+$
而且,如果你wnat匹配不区分大小写:
^(?i)(?:([A-Z])\1+)+$
这一个将不起作用。 – HuStmpHrrr 2014-09-29 17:02:51
这是一个很好的尝试,我的问题措辞不是特别好。 – ChrisWard1000 2014-09-29 17:08:01
灾难性的回溯....'AAAAAAAAAAAA1' – Unihedron 2014-09-30 15:22:28
最新的输出? – vks 2014-09-29 16:46:18
对我来说不清楚。解释你的问题。 – 2014-09-29 16:51:48