正则表达式 - 用x {n-2}替换x {n}

时间:2013-10-11 10:47:11

标签: c# regex

假设我有这个字符串:

var inputStr="AAAA AAAAAAAA AAA AAAAA";

(这里的假设是我不知道字符串中每个'A ...'序列的大小。)

我需要一种简单的方法来减少该字符串中每个“A ...”序列的2个'A'字符

像:

var result=Regex.Replace(inputStr,...);

以便此示例的结果为:"AA AAAAAA A AAA"

感谢...

更新

感谢所有回复,

我想让这个问题更加笼统。

示例2:

var inputStr="bbbAAAAC1AAAAAAAA AAA AAAAArrr"

,结果应为:

"bbbAAC1AAAAAA A AAArrr"

5 个答案:

答案 0 :(得分:5)

var result=Regex.Replace(inputStr,@"(A*)A{2}(?!A)","$1");

答案 1 :(得分:2)

尝试:

var result = Regex.Replace(inputStr, "(A*)AA", "$1");

答案 2 :(得分:1)

如果你知道所有'单词'都是A s,你可以使用这个替换:

var result=Regex.Replace(inputStr,@"AA\b","");

regex101 demo for the regex replace


根据编辑,更一般的模式是:

var result=Regex.Replace(inputStr,@"AA(?!A)","");

regex101 demo

答案 3 :(得分:0)

虽然不是正则表达式但它会起作用

String.Join(" ", inputStr.Split().Select(x => x.Substring(0, x.Length - 2)).ToArray());

答案 4 :(得分:0)

使用正则表达式虽然你真的不需要它。

var result=Regex.Replace(inputStr,@"(?i)aa","AA");

(?i)确保检查所有情况。