如何在C#中替换字符串的连续子字符串? 例如,字符串
"<p>The quick fox</p>"
将转换为
"<p>The quick fox</p>"
答案 0 :(得分:3)
使用以下正则表达式
@"(.+)\1+"
(.+)
捕获字符组并匹配以下\1+
一组或多组相同的字符。
然后将匹配替换为$1
string result = Regex.Replace(str, @"(.+)\1+", "$1");
答案 1 :(得分:2)
也许这个简单就足够了:
( ){2,}
并替换为$1
(
在第一个括号内组中捕获的内容)
要检查子串是否跟随自身,还可以使用lookahead:
(?:( )(?=\1))+
并替换为空。见test at regex101.com
答案 2 :(得分:2)
让我们调用原始字符串s
和子字符串subString
:
var s = "<p>The quick fox</p>";
var subString = " ";
我更喜欢这个而不是正则表达式,更具可读性:
var subStringTwice = subString + subString;
while (s.Contains(subStringTwice))
{
s = s.Replace(subStringTwice, subString);
}
具有更好性能的另一种可能的解决方案:
var elements = s.Split(new []{subString}, StringSplitOptions.RemoveEmptyEntries);
s = string.Join(subString, elements);
// This part is only needed when subString can appear at the start or the end of s
if (result != "")
{
if (s.StartsWith(subString)) result = subString + result;
if (s.EndsWith(subString)) result = result + subString;
}