C#で、正規表現を使って、一行から複数の文字列を抽出するには、
名前空間System.Text.RegularExpressionsのMatchクラスのMatch.Groupsプロパティを使用して抽出できます。
Match.Groupsプロパティは、正規表現に一致したグループのコレクションを取得するプロパティです(以下、ドキュメント)。
https://msdn.microsoft.com/ja-jp/library/system.text.regularexpressions.match.groups(v=vs.110).aspx
早速、テストコードで試していきたいと思います。 テスト文字列は、OKパターンとNGパターンの二つを用意しました。 テスト文字列のカタカナ文字列を取得するように、正規表現パターンを記載しました。
正規表現の記載の仕方は、以下のサイトがわかりやすいです。 qiita.com
using System; using System.Text.RegularExpressions; namespace RegexTest { class Program { static void Main(string[] args) { string logOK = "お客様のアカウントのセットアップを完了するには、このメールアドレスがご本人のものであることを確認する必要があります。"; string logNG = "お客様のアカウントのセットアップを完了するには、このメールアドレスが偽物であることを確認する必要があります。"; // 正規表現オブジェクトをインスタンス化する Regex regex = new Regex("お客様の(.*)の(.*)を完了するには、この(.*)がご本人のものであることを確認する"); // 正規表現パターンをテキスト文字列と照合する Match match = regex.Match(logOK); Console.WriteLine("OKログで、正規表現に一致したグループ個数 : " + match.Groups.Count + "\r\n照合結果 : " + match.Success); int i = 0; foreach (var item in match.Groups) { Console.WriteLine("match.Groups[" + i + "] : " + item); i++; } match = regex.Match(logNG); Console.WriteLine("\r\nNGログで、正規表現に一致したグループ個数 : " + match.Groups.Count + "\r\n照合結果 : " + match.Success); i = 0; foreach (var item in match.Groups) { Console.WriteLine("match.Groups[" + i + "] : " + item); i++; } Console.ReadLine(); } } }
[テストプログラム実行結果]
OKパターンの場合は、照合結果[Match.Successプロパティの値]がTrueとなりますが、
NGパターンでは、照合結果[Match.Successプロパティの値]がFalseとなります。
OKパターンのテスト結果を見てわかるように、コレクションの最初の要素は、照合した文字列自体が格納されます。
その後は、照合した順番で、文字列が格納されます。