[英]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.