如何使用正则表达式替换匹配的周围组
本文关键字:周围组 替换 何使用 正则表达式 | 更新日期: 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);