我想在我的正则表达式中定义一个变量,我只需从匹配的输入字符串中提取相应的值即可。
例如,我有一个这样的模式:"\w*\s+\d+"
,
输入字符串如:"aaa 113"
当收到匹配的字符串时,我希望能够简单地提取对应于使用C#
表示"\d+"
的数字部分的值。
需要提一下,我将表达式存储在数据库表中,我想从匹配的字符串中提取变量,并将它们的值传递给动态检索的查询或存储过程。
我希望程序完全没有上下文,因为我们不知道变量及其值在匹配字符串中的出现位置。
答案 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"