[英]Replace Contiguous Instance of a String in C#
如何在C#中替換字符串的連續子字符串? 例如,字符串
"<p>The quick fox</p>"
將被轉換為
"<p>The quick fox</p>"
使用以下正則表達式
@"(.+)\1+"
(.+)
捕獲字符組並匹配以下\\1+
一個或多個相同的字符集。
然后用$1
替換匹配
string result = Regex.Replace(str, @"(.+)\1+", "$1");
也許這個簡單就足夠了:
( ){2,}
並替換為$1
(在第一個括號組中捕獲的
)
請參閱regex101上的測試
要檢查子串是否跟隨自身,也可以使用前瞻 :
(?:( )(?=\1))+
並用空替換。 請參閱regex101.com上的測試
讓我們調用原始字符串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;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.