C# 使用正则表达式转换数据值
有没有一种方法可以将一个数据值转换为在正则表达式模式中定义的另一个数据值 我的意思是,我想定义一个模式,比如C# 使用正则表达式转换数据值,c#,regex,C#,Regex,有没有一种方法可以将一个数据值转换为在正则表达式模式中定义的另一个数据值 我的意思是,我想定义一个模式,比如a=1 | b=2 | c=3 因此,如果我将a值传递给Regex,它将返回我1。如果b返回2。。。等等 有可能吗?您可以使用Regex.Replace替换为委托来评估匹配 见: 并且:您可以使用Regex.Replace替换为委托来评估匹配 见: 而且:你可以用C语言做这个,就像这样: var input = "a, b, c"; Dictionary<string, stri
a=1 | b=2 | c=3
因此,如果我将a
值传递给Regex,它将返回我1
。如果b返回2
。。。等等
有可能吗?您可以使用Regex.Replace替换为委托来评估匹配 见:
并且:您可以使用Regex.Replace替换为委托来评估匹配 见: 而且:你可以用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
var input=“a、b、c”;
字典查找=新字典()
{
{“a”,“1”},
{“b”,“2”},
{“c”,“3”}
};
字符串结果=Regex.Replace(输入,“[abc]”,m=>lookup[m.Value],RegexOptions.None);
Console.WriteLine(结果);//产出1、2、3
我使用了正则表达式[abc]
,它与a
、b
或c
匹配,然后根据匹配情况,在Replace()
中使用的代理在字典中查找匹配项,以决定用什么替换它。您可以在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
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]));
}
var input=“a、b、c”;
字典查找=新字典()
{
{“a”,“1”},
{“b”,“2”},
{“c”,“3”}
};
字符串结果=Regex.Replace(输入,“[abc]”,m=>lookup[m.Value],RegexOptions.None);
Console.WriteLine(结果);//产出1、2、3
我使用了正则表达式
[abc]
,它匹配a
、b
或c
,然后根据匹配情况,在Replace()中使用的代理
在字典中查找匹配项,以决定用什么替换它。答案是否。Regex只返回匹配成功/失败以及与模式匹配的匹配项
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]));
}
但是,您可以确定组号匹配,这可能使您能够翻译将其转换为一个值或任何您想要的值。
但是要确保工作确实需要regex的强大功能,而不仅仅是简单的字符串比较。
否则,您可以构建自定义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;
}
}
答案是否定的。Regex只返回匹配成功/失败以及与模式匹配的结果 但是,您可以确定组号匹配,这可能使您能够翻译
将其转换为一个值或任何您想要的值。
但是要确保工作确实需要regex的强大功能,而不仅仅是简单的字符串比较。
否则,您可以构建自定义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;
}
}
您能提供一个示例源值吗?为什么要为此使用正则表达式?这不是它们的用途。为什么要在简单的替换场景中使用正则表达式?它甚至不是替换——只是KVPs。您能提供一个示例源值吗?为什么要使用正则表达式?这不是它们的用途。为什么要在一个简单的替换场景中使用正则表达式?它甚至不是替换——只是KVPs。@Maximus Decimus因为您提供的示例输入是分隔的键值对,这是一个非常强大的解决方案。考虑到您的输入是多么简单和格式良好,我认为您没有必要使用正则表达式。我认为OP说的
a=1 | b=2 | c=3
是模式示例,而不是要解析的字符串。因此,如果他传入“a”
,它将返回1
。我的错误是,我没有看到您只是在解析字典值/和/或硬编码插值字符串。@Maximus Decimus因为您提供的示例输入是分隔的键值对,这是一个非常强大的解决方案。考虑到您的输入是多么简单和格式良好,我认为您没有必要使用正则表达式。我认为OP说的a=1 | b=2 | c=3
是模式示例,而不是要解析的字符串。因此,如果他传入“a”
,它将返回1
。我的错误,我没有看到您只是在解析字典值和/或硬编码插值字符串。+0:几乎不错的答案-添加适用于OP case的示例代码将使其更好。+0:几乎不错的答案-添加适用于OP case的示例代码将使其更好。这很好。它只需要比赛。字典像散列数组吗?@sln那么您可以使用替换。看起来OP甚至都不想要这个,这让我很惊讶,但现在没关系了,因为问题已经解决了。谢谢你。如果你有一个散列数组,我想一个单独的匹配加上或不加替换都可以返回hash[match[0].val]
或类似的值。这很好。它只需要比赛。字典像散列数组吗?@sln那么您可以使用替换。看起来OP甚至都不想要这个,这让我很惊讶,但现在没关系了,因为问题已经解决了。谢谢你。如果你有一个散列数组,我想一个单独的匹配加上或不加替换都可以返回hash[match[0].val]
或类似内容。