使用带分隔符的字符串的正则表达式部分更新

时间:2013-11-04 23:06:06

标签: c# regex

我在文件格式中有很多记录

=text.GROUP1.GROUP2.GROUP_TO_RENAME.GROUP3.GROUP4.GROUP5

=[text.GROUP1.GROUP2.GROUP_TO_RENAME.GROUP3.GROUP4].GROUP5

以及格式完全不同的记录。 我需要根据它的值将GROUP_TO_RENAME重命名为另一个(例如CAT - > Kitty,Mouse - > Jerry)并且不要触摸某些组(例如TOM)。

我想通过正则表达式获取2件事 - 此GROUP_TO_RENAME的名称(知道是否应该更改)以及用新值替换此GROUP_TO_RENAME的方法。

有可能吗?

1 个答案:

答案 0 :(得分:1)

这是通过使用字典来实现的一种方法:

using System;
using System.Collections.Generic;
using System.IO;
using System.Text.RegularExpressions;

class Program
{
    static void Main(string[] args)
    {
        var dict = new Dictionary<string, string>();
        dict.Add("CAT", "Kitty");
        dict.Add("MOUSE", "Jerry");

        var lines = File.ReadAllText("input.txt");
        var regex = new Regex(@"(?<=(^=\[?(?:\w*?\.){3}))\w*?(?=(\.\w*?\]?){3}$?)",
            RegexOptions.Multiline |
            RegexOptions.Compiled);

        var result = regex.Replace(lines, m =>
            dict.ContainsKey(m.Value) ? dict[m.Value] : m.Value);
        Console.WriteLine(result);
    }
}