C# 正则表达式-用x{n-2}替换x{n}
假设我有这个字符串:C# 正则表达式-用x{n-2}替换x{n},c#,regex,C#,Regex,假设我有这个字符串: var inputStr="AAAA AAAAAAAA AAA AAAAA"; (这里的假设是我不知道字符串中每个“A…”序列的大小。) 我需要一种简单的方法来减少该字符串中每个“a…”序列中的2个“a”字符 有点像: var result=Regex.Replace(inputStr,...); 因此,此示例的结果将是:“aaaaaaaaaaaaaa”) 谢谢 更新: 谢谢你的回复 我想让这个问题更一般化 例2: var inputStr=“bbbaaac1aaaaa
var inputStr="AAAA AAAAAAAA AAA AAAAA";
(这里的假设是我不知道字符串中每个“A…”序列的大小。)
我需要一种简单的方法来减少该字符串中每个“a…”序列中的2个“a”字符
有点像:
var result=Regex.Replace(inputStr,...);
因此,此示例的结果将是:“aaaaaaaaaaaaaa”
)
谢谢
更新:
谢谢你的回复
我想让这个问题更一般化
例2:
var inputStr=“bbbaaac1aaaaaaaaaaaaaaaaaaaaaaaarrr”
结果应该是:
“bbbaac1aaaaaaaaarrr”
虽然不是正则表达式,但它可以工作
String.Join(" ", inputStr.Split().Select(x => x.Substring(0, x.Length - 2)).ToArray());
虽然不是正则表达式,但它会起作用
String.Join(" ", inputStr.Split().Select(x => x.Substring(0, x.Length - 2)).ToArray());
使用正则表达式,尽管你并不真正需要它
var result=Regex.Replace(inputStr,@"(?i)aa","AA");
(?i)确保它检查所有情况下的a。使用regex,尽管您并不真正需要它
var result=Regex.Replace(inputStr,@"(?i)aa","AA");
(?i)确保它检查所有情况下的a。如果您知道所有“单词”都是
a
s,您可以使用此替换:
var result=Regex.Replace(inputStr,@"AA\b","");
根据edit,更一般的模式是:
var result=Regex.Replace(inputStr,@"AA(?!A)","");
如果您知道所有的“单词”都是
A
s,您可以使用以下替换:
var result=Regex.Replace(inputStr,@"AA\b","");
根据edit,更一般的模式是:
var result=Regex.Replace(inputStr,@"AA(?!A)","");
试试:
var result = Regex.Replace(inputStr, "(A*)AA", "$1");
尝试:
因为每次你必须在每次事件中减少2 A因为每次你必须在每次事件中减少2 A D你的意思是
子串
?fwiw,。没有字符的拆分
自动默认为空白字符(那些匹配Char.IsWhiteSpace
)。@bradcristie-谢谢你的信息,我不知道。还有一个额外的ToList(),也不需要.toArray()
(String.Join
有一个IEnumerable
的重载)。在继续并截断它之前,您可能需要检查x.Length>2
。-)你的意思是子字符串
?fwiw,。没有字符的拆分
自动默认为空白字符(那些匹配字符.IsWhiteSpace
)。@bradcristie-谢谢你的信息,我不知道。另外还有一个额外的ToList(),也不需要.toArray()
(String.Join
有一个超负荷的IEnumerable
)。在继续并截断它之前,你可能想检查x.Length>2
。-)比我快(有趣的是,我一直在尝试,但忘了使用字符串文字,无法让测试正常工作。;-)你不需要捕获任何东西。@Casimimirithippolyte是的。这可能是可能的。但我想不出任何这样的解决方案。你能把它作为答案或在comment@Anirudh:为什么不:var result=Regex.Replace(inputStr,@“(?@casimirithippolyte很好的解决方案..虽然这将取代n-2
次,其中n是重复的字符数,请听我说(有趣的是,我一直在尝试,但忘记使用字符串文字,无法进行测试)。-)你不需要捕获任何东西。@Casimimirithippolyte是的。这可能是可能的。但我想不出任何这样的解决方案。你能把它作为答案或在comment@Anirudh:为什么不:var result=Regex.Replace(inputStr,@“(?@casimirithippolyte nice solution..虽然这将替换n-2
次,其中n是重复A个字符的数量