を変化させる正規表現を使って文字列を解析します。は、区切り文字は私が解析する必要が以下の文字列を持っている
私は次の正規表現まで行っています。
<!-- *(?<mode>.*?(?=[ \-:])).*: *(?<responses>.*?(?= *-->))
これは、最初の2つを除く上記のテスト文字列すべてに対して機能します。最初の2つのケースでは、「モード」グループが空に戻ってきます。私は、?<mode>.*?(?=[ \-:])
がスペース、ダッシュ、またはコロンになるまですべての文字を収集すると考えていたため、わかりません。途中で.*: *
を.*:? *
に変更すると、すべての「モード」値が取得されますが、すべての「応答」値が失われます。
私のテストコードは.NET Fiddle(https://dotnetfiddle.net/HzIXch)ですが、ここでは完全です。
var regex = new Regex(@"<!-- *(?<mode>.*?(?=[ \-:])).*: *(?<responses>.*?(?= *-->))");
var values = new[] {
"<!-- MOCK -->",
"<!--MOCK-->",
"<!-- MOCK:SENT;FAIL -->",
"<!--MOCK:SENT;SUCCESS-->",
"<!--MOCK:SENT; SUCCESS-->",
"<!--MOCK:SENT ; SUCCESS-->",
"<!--MOCK:SENT -->",
"<!-- MOCK:SENT-->",
"<!-- MOCK : SENT -->",
"<!-- MOCK: SENT -->",
"<!-- MOCK :SENT -->",
};
foreach (var value in values)
{
var match = regex.Match(value);
Console.WriteLine($"Mode: [{match.Groups["mode"].Value}], Responses: [{match.Groups["responses"].Value}]");
}
スペースを作成してください: '\ s *'。アスタリスクは0回以上の出現です。 – jdweng
あなたの "モード"と "応答"グループは常に大文字で構成されますか、それとも他の文字を含むことができますか? – CAustin