Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 正则表达式-用x{n-2}替换x{n}_C#_Regex - Fatal编程技术网

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个字符的数量