C# 如何使用正则表达式替换匹配的周围组?
我有以下字符串: [元素][TOPINCLUDESAMEVALUES:5][ParentElement][ORDERBY:DateAdd] 并希望将其转换为: [Element][TOP:5:WITHTIES][ParentElement][ORDERBY:DateAdded] 因此,C# 如何使用正则表达式替换匹配的周围组?,c#,.net,regex,replace,C#,.net,Regex,Replace,我有以下字符串: [元素][TOPINCLUDESAMEVALUES:5][ParentElement][ORDERBY:DateAdd] 并希望将其转换为: [Element][TOP:5:WITHTIES][ParentElement][ORDERBY:DateAdded] 因此,[TopIncludeNameValues:5]被转换为[TOP:5:WITHTIES] 输入字符串可以包含更多的[元素]。每个元素都用方括号括起来[]。例如: ...[element1][element2][TO
[TopIncludeNameValues:5]
被转换为[TOP:5:WITHTIES]
输入字符串可以包含更多的[元素]
。每个元素都用方括号括起来[]
。例如:
...[element1][element2][TOPINCLUDESAMEVALUES:5]...[element3][element4][TOPINCLUDESAMEVALUES:105][element3]...
因此,我需要将每个[TopIncludeNameValues:X]
元素转换为[TOP:X:WITHTIES]
元素
一般来说,我尝试了一些组合使用,但无法做到这一点自己
string statement = "[Campaign][TOPINCLUDESAMEVALUES:5][InstanceID][GROUPBY:Campaign]";
statement = Regex.Replace(statement, @"(?<=\[TOPINCLUDESAMEVALUES:)[^\]]+(?=\])", "");
string语句=“[Campaign][topcludesamevalues:5][InstanceID][GROUPBY:Campaign]”;
statement=Regex.Replace(statement,@)(?因为您要用其他内容替换TOPINCLUDESAMEVALUES
的内容,所以需要捕获它。您正在使用的查找是非捕获的,因此无法替换其内容
以下是您应该如何做到这一点:
statement = Regex.Replace(
statement
, @"\[TOPINCLUDESAMEVALUES:([^\]]+)\]", "[TOP:$1:WITHTIES]"
);
此表达式将匹配整个[TopIncludeNameValues: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);
string语句=“[Campaign][topcludesamevalues:5][InstanceID][GROUPBY:Campaign]”;
string[]arrstatement=“[Campaign][topcludesamevalues:5][InstanceID][GROUPBY:Campaign]”。拆分(']');
for(int i=0;i < /代码>不知道要替换的数据负载,但您可能需要考虑ReEX中的手动替换算法来实现性能。