在正则表达式中定义和提取变量

时间:2013-01-19 13:33:58

标签: c# regex

我想在我的正则表达式中定义一个变量,我只需从匹配的输入字符串中提取相应的值即可。

例如,我有一个这样的模式:"\w*\s+\d+"

输入字符串如:"aaa 113"

当收到匹配的字符串时,我希望能够简单地提取对应于使用C#

表示"\d+"的数字部分的值。

需要提一下,我将表达式存储在数据库表中,我想从匹配的字符串中提取变量,并将它们的值传递给动态检索的查询或存储过程。

我希望程序完全没有上下文,因为我们不知道变量及其值在匹配字符串中的出现位置。

2 个答案:

答案 0 :(得分:1)

这就是match groups的用途。

使用匹配组,您可以轻松提取与正则表达式的带括号的子表达式匹配的子字符串。模式类似于"\w*\s+(\d+)"(如果您的意图是匹配整个字符串,您可能希望添加锚^$

当你有一个子字符串时,如果这是你想要的(使用int.Parse或类似的东西),你仍然可以将它转换为数值。

答案 1 :(得分:1)

您可以使用名称不匹配的匹配组:

Match match = Regex.Match("aaa 113", @"(?<word>\w*)(?<space>\s+)(?<num>\d+)");
string words = match.Groups["word"].Value;              //"aaa"
string spaces = match.Groups["space"].Value;            //" "
string nums = match.Groups["num"].Value;                //"113"