C#で正規表現で複数行にまたがる文字列を検索する
C#で正規表現でパターンに一致する文字列を検索するときに、複数行にまたがる文字列を検索してみます。正規表現そのものについては、MSDNの.NET Framework の正規表現を参考にしてください。
目次
単一行モードで検索する
検索するときに使うメソッドには、検索する際のオプションを指定できます。この検索オプションでRegexOptions.Singleline
を指定すると単一行モードで検索されます。
単一行モードでは、改行文字も一つの文字として扱われます。つまり
ABC
DEF
という文字列は、
ABC\r\nDEF\r\n
として扱われます。(Windowsの場合) このモードのメリットは、複数行にまたがる文字列を検索できることです。
試してみた
こんなコードで試してみました。抽出した文字列を標準出力に表示するコンソールアプリです。
using System;
using System.Text.RegularExpressions;
namespace regex_trial3
{
class Program
{
static void Main(string[] args)
{
string kotoba = @"(1) いろは
いろはにほへと
ちりぬるを
(2) 五十音
あいうえお
かきくけこ
(3) あるふぁべっと
ABC
DEF
";
Match matchedObject = Regex.Match(kotoba, @"\(2\).*\(", RegexOptions.Singleline);
Console.WriteLine(matchedObject.Value);
}
}
}
整形済みのテキストから、(2)の項目を抜き出します。これの出力は、こうなります。
(2) 五十音
あいうえお
かきくけこ
(
最後の括弧は要りませんね。というわけで、グループを使ってみます。
using System;
using System.Text.RegularExpressions;
namespace regex_trial3
{
class Program
{
static void Main(string[] args)
{
string kotoba = @"(1) いろは
いろはにほへと
ちりぬるを
(2) 五十音
あいうえお
かきくけこ
(3) あるふぁべっと
ABC
DEF
";
Match matchedObject = Regex.Match(kotoba, @"(\(2\).*)\(", RegexOptions.Singleline);
Console.WriteLine(matchedObject.Groups[1].Value);
}
}
}
抽出した文字列から、さらに最後の文字以外の文字をグループとして抽出するわけですね。結果は下記になります。
(2) 五十音
あいうえお
かきくけこ
実用するにはもうちょっと工夫が要ります。 この投稿で試した環境は下記です。
Visual Studio 2015 Express for Windows Desktop (C#)
公開日
広告