我希望匹配连续重复的不超过3个相同字符的字符串。所以:
是的,进行包含连续字符的正则表达式匹配会更容易和更简洁,然后在代码中否定它。但是,在这种情况下,这是不可能的。
我想向x个连续字符打开这个问题,以便可以扩展到一般情况,使问题和答案更有用。
在这种情况下支持负向前瞻。
答案 0 :(得分:3)
答案 1 :(得分:1)
我正在回答这个问题:
Is there a regular expression for matching a string that has no more than 2 repeating characters?
被标记为该问题的完全重复。
相反,取消比赛要快得多
if (!Regex.Match("hello world", @"(.)\1{2}").Success) Console.WriteLine("No dups");
答案 2 :(得分:0)
匹配不包含连续重复次数超过3次的字符的字符串:
^((.)\2?(?!\2\2))+$
工作原理:
^ Start of string
(
(.) Match any character (not a new line) and store it for back reference.
\2? Optionally match one more exact copies of that character.
(?! Make sure the upcoming character(s) is/are not the same character.
\2\2 Repeat '\2' for as many times as you need
)
)+ Do ad nauseam
$ End of string
因此,整个表达式中/2
的数量将是您允许连续重复某个字符的次数,而且您将无法获得匹配。
E.g。
^((.)\2?(?!\2\2\2))+$
将匹配连续4次不重复字符的所有字符串。
^((.)\2?(?!\2\2\2\2))+$
将匹配连续5次不重复字符的所有字符串。
请注意,此解决方案使用负面预测,但并非所有正则表达式都支持它。