使用Regex转换数据值

时间:2013-11-05 17:41:32

标签: c# regex

有一种方法可以将数据值转换为以正则表达式模式定义的另一种数据吗?

我的意思是,我想定义一个类似a=1|b=2|c=3的模式。

因此,当我将a值传递给Regex时,它会返回1。如果b返回2 ......等等。

这可能吗?

4 个答案:

答案 0 :(得分:3)

Dictionary<string, int> dic = new Dictionary<string, int>();
foreach (Match m in Regex.Matches("a=1|b=2|c=3", @"\w?=\d?"))
{
    string[] val = m.Value.Split('=');
    dic.Add(val[0], Int32.Parse(val[1]));
}

或者

string val = "a";
Int32.Parse(Regex.Match("a=1|b=2|c=3", val + @"=(\d)").Groups[1].Value);

答案 1 :(得分:2)

你可以在C#中这样做:

var input = "a,  b,  c";
Dictionary<string, string>  lookup = new Dictionary<string, string>()
{
    {"a", "1"},
    {"b", "2"},
    {"c", "3"}
};
string result = Regex.Replace(input, "[abc]", m => lookup[m.Value] , RegexOptions.None);
Console.WriteLine(result); // outputs 1,  2,  3

我使用了与[abc]ab匹配的正则表达式c,然后根据匹配情况,Replace()中使用的委托看起来字典中的匹配决定用什么来替换它。

答案 2 :(得分:0)

答案 3 :(得分:0)

答案是否定的。正则表达式只返回匹配成功/失败匹配模式。

然而,您可以确定组号匹配,这可以使您翻译
成为一种价值或任何你想要的东西。
但是要确保正则表达式的强大功能才能真正用于工作,而不仅仅是简单的字符串比较 否则你可以建立一个自定义的trie。

伪代码:

 pattern = @"
      ( Enie )         # (1)
   |  ( Menie )        # (2)
   |  ( Minie )        # (3)
   |  ( Moe )          # (4)
 ";

 int GetValue( string& str )
 {
   smatch match;
   if ( regex_find ( pattern, str, match, flags.expanded ) )
   {
       if ( match[1].matched )
            return val1;
       if ( match[2].matched )
            return val2;
       if ( match[3].matched )
            return val3;
       if ( match[4].matched )
            return val4;
   }
 }