将匹配的正则表达式模式写回输入

时间:2016-02-07 15:02:20

标签: c# regex

所以我使用List<string> YAMLFileLines = new List<string>();来存储文本文件的行,如下所示

while ((FileLine = r.ReadLine()) != null)
{
    YAMLFileLines.Add(FileLine);
}

现在稍后,我正在使用正则表达式模式评估每一行,如下所示:

foreach (string Incoming_Line in YAMLFileLines)
{
    string pattern = @"([\#-]+) { prop: ([a-z A-Z _]+), value: ([0-9 a-z A-Z \[ \] \= \"" \, \. \/ ]+) }";
    Match Line_Match = Regex.Match(Incoming_Line, pattern, RegexOptions.IgnoreCase | RegexOptions.Multiline);

    if (Line_Match.Success)
    {
        string HashValue = Line_Match.Groups[1].Value; // Stpres the   #- or   just   - value
        string VarieName = Line_Match.Groups[2].Value; // Stores the   Srv_Port   paramater
        string VariValue = Line_Match.Groups[3].Value; // Stores the   30000   value

        bool KeepOriginalHash = false; // Force this to false for now

        switch (VarieName)
        {
            case "Srv_Port":
            {
                if (KeepOriginalHash == true)
                {
                    string FileLine = HashValue + " { prop: " + VarieName + ", value: " + textBox_Srv_Port.Text + " }"; // Allow #- or - at start of string
                    WriteFileLines.Add(FileLine);
                }
                else if (KeepOriginalHash == false)
                {
                    string FileLine = "- { prop: " + VarieName + ", value: " + textBox_Srv_Port.Text + " }"; // Remove #- from start of string. All Unlocked
                    WriteFileLines.Add(FileLine);
                }

                break;
            }
        }
    }
}   

我正在做的是为其中一个与文本文件中的变量名匹配的匹配组创建一个switch case。然后,我想在表单上使用textBox.Text将值放入行并将其写回新的列表WriteFileLines.Add(FileLine);现在我的示例确实有点工作但问题是我必须准确指定将被写回新列表,例如,此行- { prop: " + VarieName + ", value: " + textBox_Srv_Port.Text + " }最终会在-" { prop: Srv_Port, value: 30000 }中以List<string> WriteFileLines = new List<string>();结尾。问题是它会删除该行中的注释传入的文本文件行,看起来像这样-" { prop: Srv_Port, value: 52386 } #Recommended port range between 49152 - 65535我不想在任何读入的文件行中丢失任何内容。我只想将模式与3组匹配,然后更改其中一个组的值,并将整行再次写入新列表。

总结一下。我想逐行读取一个文本文件到List对象。示例文本文件行是

- { prop: Srv_Port, value: 52386 } #Recommended port range between 49152 - 65535

我希望匹配3个组,根据其他组的状态更改其中一个组的值,然后将读回的整行写回新的List对象。

我看过regex.Replace但是在我看过的所有例子中它似乎只给你一个模式替换的结果。而不是整个行的变化。

0 个答案:

没有答案