所以我有SQL文件,我想找到setvars 该文件如下所示:
...
:setvar DatabaseName "Database_1"
...
:setvar DefaultDataPath ""
我处于此状态"(?m)^:setvar " + variable
的模式,其中变量应为“DatabasseName”或“DefaultDataPath”。但该行的结尾不在匹配的Value属性中。
我也尝试了这个:"(?m)^:setvar " + variable + ".+\"$"
但它甚至不匹配:)
感谢您的帮助,
彼得
答案 0 :(得分:3)
尝试:setvar\s+(?<variable>\w*)\s+"?(?<value>\w*)"?
- 这将解析每一行,并为您提供一个包含变量和每个匹配值的命名组。
打破它:
:setvar
找到以“:setvar”开头,后跟一个或多个空格的字符串部分。(?<variable>\w*)
获取“setvar”后面的非空格字符,并将它们解析为命名组“variable”"?(?<value>\w*)"?
获取变量后面的非空白字符,并将它们解析为命名组“value”。每边的“?”使引号可选。\s+
(多次出现)允许一个或多个空格从变量和值中分离setvar。所以使用这段代码:
var findSetvars = new Regex(@":setvar\s+(?<variable>\w*)\s+""?(?<value>\w*)""?");
var matches = findSetvars.matches(input);
您将在MatchCollection
中获得matches
,可以通过以下方式进行枚举:
foreach(Match match in matches)
{
var variable = match.Groups["variable"];
var value = match.Groups["value"];
// now do whatever.
}
请注意,Regex.MatchCollection
是.net 1.0样式对象集合之一,因此您必须告诉编译器它的每个成员都是Match
对象。非常烦人,希望他们能将其换成一般的比赛列表。 match.Groups["groupname"]
的结果将是该组捕获的字符串。
答案 1 :(得分:0)
尝试这种模式。
(\:setvar)\s+(?<variable_name>\S+)\s+"?(?<variable_value>.*)"?
使用此输入
...
:setvar DatabaseName "Database_1"
...
:setvar DefaultDataPath ""
...
:setvar IntVariable 24