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

本文关键字:周围组 替换 何使用 正则表达式 | 更新日期: 2023-09-27 18:05:45

我有以下字符串:

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

,并将其转换为:

[元素][: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]元素。

一般来说,我尝试使用regex替换替换的一些组合,但无法自己做到这一点。

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

有谁能告诉我有办法做这样的替换吗?

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

由于您正在用其他内容替换TOPINCLUDESAMEVALUES的内容,因此您需要捕获它。注意,您使用的是非捕获,因此您将无法替换其内容。

你应该这样做:

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

此表达式将匹配整个[TOPINCLUDESAMEVALUES:5]括号部分,并额外捕获5作为捕获组号1。替换值将该组称为$1,将其内容粘贴在TOP::WITHTIES之间。

演示。

try this

    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);