Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用正则表达式替换匹配的周围组?_C#_.net_Regex_Replace - Fatal编程技术网

C# 如何使用正则表达式替换匹配的周围组?

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

我有以下字符串:

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

并希望将其转换为:

[Element][TOP:5:WITHTIES][ParentElement][ORDERBY:DateAdded]

因此,
[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中的手动替换算法来实现性能。