簡體   English   中英

在C#中替換字符串的連續實例

[英]Replace Contiguous Instance of a String in C#

如何在C#中替換字符串的連續子字符串? 例如,字符串

"<p>The&nbsp;&nbsp;&nbsp;quick&nbsp;&nbsp;&nbsp;fox</p>"

將被轉換為

"<p>The&nbsp;quick&nbsp;fox</p>"

使用以下正則表達式

@"(.+)\1+"

(.+)捕獲字符組並匹配以下\\1+一個或多個相同的字符集。

然后用$1替換匹配

DEMO

string result = Regex.Replace(str, @"(.+)\1+", "$1");

也許這個簡單就足夠了:

(&nbsp;){2,}

並替換為$1 (在第一個括號組中捕獲的&nbsp;

請參閱regex101上的測試


要檢查子串是否跟隨自身,也可以使用前瞻

(?:(&nbsp;)(?=\1))+

並用空替換。 請參閱regex101.com上的測試

讓我們調用原始字符串s和子字符串subString

    var s = "<p>The&nbsp;&nbsp;&nbsp;quick&nbsp;&nbsp;&nbsp;fox</p>";
    var subString = "&nbsp;";

我更喜歡這個而不是正則表達式,更具可讀性:

    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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM