我希望清理一个序列中一次匹配2个或更多字符的正则表达式。我做了一个有效的,但如果可能的话,我正在寻找更短的东西。
目前,对于我要搜索的每个字符,它看起来都是这样的:
([A]{2,}|[B]{2,}|[C]{2,}|[D]{2,}|[E]{2,}|...)*
示例输入:
AABBBBBBCCCCAAAAAADD
答案 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]
匹配。