2013-10-11 63 views
1

假设我有这个字符串:Regex-替换x {N},其中x {N-2}

var inputStr="AAAA AAAAAAAA AAA AAAAA"; 

(这里的asumption是我不知道的每一个“A的大小.. 。”字符串中的顺序)

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

财产以后这样的:

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

使这个例子的结果将是:"AA AAAAAA A AAA"

感谢...

UPDATE:

感谢所有的答复,

我想使这个问题更一般。

例子2:

var inputStr="bbbAAAAC1AAAAAAAA AAA AAAAArrr"

,其结果应该是:

"bbbAAC1AAAAAA A AAArrr"

+1

因为每次你必须减少2一在每一次出现 – Anand

回答

2

尝试:

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

一次打我给它(这很有趣,我一直在努力,但忘了使用一个字符串字面量,无法得到测试工作。 ;-) –

+0

你不需要捕捉任何东西。 –

+0

@CasimiretHippolyte是的..也许可以......但我想不出任何这样的解决方案......你可以发布它作为答案或评论 – Anirudha

0

虽然不是一个正则表达式,但它会工作

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

您是否指'Substring'? – Default

+0

是的,我正在检查现在的语法 – Anand

+0

fwiw,不带字符的'.Split'自动默认为空白字符(与Char.IsWhiteSpace相匹配的字符)。 –

0

用正则表达式,虽然你不真的需要它。 (?i)确保它检查所有情况下的a。