試してみてください:setvar\s+(?<variable>\w*)\s+"?(?<value>\w*)"?
- これにより、各行が解析され、一致するすべての変数と値を含む名前付きグループが得られます。
それを分解する:
:setvar
":setvar" で始まり、その後に 1 つ以上のスペースが続く文字列のセクションを検索します。
(?<variable>\w*)
その「setvar」に続く非空白文字を取得し、それらを名前付きグループ「変数」に解析します
"?(?<value>\w*)"?
変数に続く非空白文字を取得し、それらを名前付きグループ「値」に解析します。両側の "? は、引用符をオプションにします。
\s+
(複数回表示されます) 1 つ以上のスペースを使用して、変数と値から setvar を区切ることができます。
このコードを使用して:
var findSetvars = new Regex(@":setvar\s+(?<variable>\w*)\s+""?(?<value>\w*)""?");
var matches = findSetvars.matches(input);
次のように列挙できるMatchCollection
inを取得します。matches
foreach(Match match in matches)
{
var variable = match.Groups["variable"];
var value = match.Groups["value"];
// now do whatever.
}
Regex.MatchCollection
は .net 1.0 スタイルのオブジェクト コレクションの 1 つであるため、その各メンバーがオブジェクトであることをコンパイラに伝える必要があることに注意してくださいMatch
。非常に面倒です。一致の一般的なリストに切り替えてくれたらいいのにと思います。の結果はmatch.Groups["groupname"]
、グループによってキャプチャされた文字列になります。