簡體   English   中英

如何使用正則表達式替換匹配的周圍組?

[英]How to replace surrounding groups of a match using regex?

我有以下字符串:

[元素][TOPINCLUDESAMEVALUES:5][ParentElement][ORDERBY:DateAdded]

並希望將其轉換為:

[元素][TOP:5:WITHTIES][ParentElement][ORDERBY:DateAdded]

因此, [TOPINCLUDESAMEVALUES:5]轉換為[TOP:5:WITHTIES]

輸入字符串可以包含更多[elements] 每個元素都被方括號[]包圍。 例如:

...[element1][element2][TOPINCLUDESAMEVALUES:5]...[element3][element4][TOPINCLUDESAMEVALUES:105][element3]...

因此,我需要將每個[TOPINCLUDESAMEVALUES:X]元素轉換為[TOP:X:WITHTIES]元素。

通常,我使用正則表達式替換替換嘗試了一些組合,但我自己無法做到。

 string statement = "[Campaign][TOPINCLUDESAMEVALUES:5][InstanceID][GROUPBY:Campaign]";
 statement = Regex.Replace(statement, @"(?<=\[TOPINCLUDESAMEVALUES:)[^\]]+(?=\])", "");

誰能告訴有沒有辦法做這樣的替換?

由於您正在用其他內容替換TOPINCLUDESAMEVALUES的內容, TOPINCLUDESAMEVALUES您需要捕獲它。 您正在使用的 Lookbehind 是non-capturing ,因此您將無法替換其內容。

以下是您應該如何做到這一點:

statement = Regex.Replace(
    statement
,   @"\[TOPINCLUDESAMEVALUES:([^\]]+)\]", "[TOP:$1:WITHTIES]"
);

此表達式將匹配整個[TOPINCLUDESAMEVALUES:5]括號部分,並另外捕獲5作為捕獲組編號 1。替換值將該組稱為$1 ,將其內容粘貼在TOP::WITHTIES

演示。

嘗試這個

    string statement = "[Campaign][TOPINCLUDESAMEVALUES:5][InstanceID][GROUPBY:Campaign]";
    string[] arrstatement = "[Campaign][TOPINCLUDESAMEVALUES:5][InstanceID][GROUPBY:Campaign]".Split(']');
    for (int i = 0; i < arrstatement.Length; i++)
    {
        if (arrstatement[i].Contains("TOPINCLUDESAMEVALUES"))
            arrstatement[i] = "[TOP" + arrstatement[i].Substring(arrstatement[i].IndexOf(":")) + ":WITHTIES";
    }
    statement = string.Join("]", arrstatement);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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