尝试:setvar\s+(?<variable>\w*)\s+"?(?<value>\w*)"?
- 这将分析每一行,给你包含变量和值命名组每场比赛。
其分解:
:setvar
发现开头的字符串的一部分“:SETVAR”后面跟着一个或多个空格。
(?<variable>\w*)
取非空白字符以下的是“SETVAR”,并将它们解析成命名组“可变的”
"?(?<value>\w*)"?
取变量之后的非空白字符,并将其解析成命名组“值”。 ?”关于每一侧使得可选引号
\s+
(出现几次)允许一个或多个空格从变量和值单独的SETVAR
所以使用此代码:
var findSetvars = new Regex(@":setvar\s+(?<variable>\w*)\s+""?(?<value>\w*)""?");
var matches = findSetvars.matches(input);
你会得到一个在matches
MatchCollection
可以通过枚举,像这样:
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"]
的结果将是该组捕获的字符串。
你可以试试这个 “(M?)^:SETVAR” +变量+ “(+)$”,然后搜索在Match.Groups变量: ) – 2013-04-11 13:17:16
如果您只想检查每行的匹配项,您也可以使用'string.Split()'在尝试匹配任何内容之前预先格式化字符串。 – Nolonar 2013-04-11 13:21:47
你需要检查它是否匹配,或者你需要从字符串中获得价值吗? – rpeshkov 2013-04-11 13:26:03