如何使用正则表达式更改字符串中的组

时间:2017-01-25 18:10:53

标签: c# regex

我正在尝试使用C#Regex.Replace来自动化将一个结构中的字符串格式化为另一个结构的手动作业。虽然我能够识别并替换一个子字符串,但我无法找到如何匹配和替换字符串其余部分的示例。我想知道是否有一种简单的方法可以做到这一点。

假设我有这个搜索模式,用于标识要转换的字符串:

const string inputPattern1 = "SOC.\\d.\\d.\\d.PO \\d";

是否可以为每个参数设置替换规则?

这是我的意思的视觉例子。请注意,在示例中,字符串具有结构,因此它不是"使用Y"替换 X的任何实例的简单情况。

Desired Regex replace mapping

这是我到目前为止,使用C#控制台程序来计算方法。

private static void Main()
{
    const string input1 = "SOC.6.1.1.PO 8";
    const string inputPattern1 = "SOC.";
    const string replacement1A = "SSHS-S0";

    // output should be: "SS06-S1C1-08"

    var output1 = Regex.Replace(input1, inputPattern1, replacement1A);

    Console.WriteLine("Input1: {0}",input1);
    Console.WriteLine("Output1: {0}", output1);
}

结果是:

Input1: SOC.6.1.1.PO 8 
Output1: SSHS-S06.1.1.PO 8

1 个答案:

答案 0 :(得分:3)

在替换字符串中使用捕获组编号:

var res = Regex.Replace(
    "SOC.6.1.1.PO 8"
,  @"SOC\.(\d)\.(\d)\.(\d)\.PO (\d)"
,   "SS0$1-S$2C$3-0$4"
);

$1$4表示由括号组匹配的输入字符串的内容。

Demo.