次のような単純な RegExと、期待どおりにyieldsの置換を使用し^(\d+\D+\d+)(.*)
て解析する文字列が与えられます。 15-APR-2012 @ 11:00:00
[$1]$2
[15-APR-2012] @ 11:00:00
私の問題は、これで Regex.Matches を呼び出すときに、インデックス 0 で 1 つの一致を受け取り、string: 全体15-APR-2012 @ 11:00:00
が一致として表示されることです。しかし、実際には2試合あります。両方のマッチを取得するにはどうすればよいですか? インデックス 0 とインデックス 12 が表示されるはずです。使用しているコードは、別の SO スレッドからのものです。
// Get a collection of matches.
MatchCollection matches = Regex.Matches(inPutString, regexptrn);
foreach (Match match in matches)
{
foreach (Capture capture in match.Captures)
{
retVal += String.Format("Index={0}, Value={1}", capture.Index, capture.Value) + Environment.NewLine;
}
}
.Matches() が実際に何をするかについて間違った考えを持っていますか?
わかった。これはフォローアップの同じ文字列です。新しい正規表現「(..)(...)」を [$1]{$2} に置き換えると、[10]{-AU}[G-]{201}[2 ]{@ になります。 1}[1:]{45:}38 私たちはこれを期待しています。
ただし、一致すると次のようになります。
Index=0, Value=10-AU
Index=5, Value=G-201
Index=10, Value=2 @ 1
Index=15, Value=1:45:
これは、Matches がそのグループではなくパターン全体を見ていることを示しています。グループマッチを取得する方法