C#で文字列を分割してみた(Regex.Split編)

C#で文字列を分割してみました。String.Split()メソッドを使うのではなくて、正規表現を使います。

目次

  1. セパレータを正規表現で指定する
  2. 試してみた

セパレータを正規表現で指定する

例えば、こんなデータを見たことないでしょうか。 170123-1-1 4行目にある□は、全角スペースがあることを表しています。 悲しいことに、あるソフトウェアからデータをコピペすると、空行に全角半角問わずスペースが入っていることがあります。そんなとき、「ああ、正規表現が使えれば楽なのに。」と思いますよね。で、Regex.Matchesを駆使して分割したりします。 ところがMSDNのString.Split()メソッドの説明を読んでいたら、セパレータを正規表現で指定したりしてるじゃないですか。というわけで、試してみました。

string[] splitted = Regex.Split(source, pattern);

引数

説明

source

string

分割される文字列。

pattern

string

セパレータとする正規表現文字列。

戻り値は、分割された文字列を各要素に持つ文字列配列です。

試してみた

冒頭の文字列を分割してみます。 まず、String.Split()メソッドで分割してみます。

using System;
using System.Text;
using System.IO;

namespace split_trial
{
    class Program
    {
        static void Main(string[] args)
        {
            string source = File.ReadAllText("data.txt", Encoding.GetEncoding("shift_jis")); // データ読み込み。

            string[] separator = new string[] {"\r\n"};
            string[] splitted = source.Split(separator, StringSplitOptions.RemoveEmptyEntries);

            // ここで実行を停止する。
            foreach(var s in splitted)
            {
                Console.WriteLine(s);
            }
        }
    }
}

分割結果の文字列配列の中身はこのようになります。 170123-1-2 大文字スペースの行をデータの1つとして捉えられてしまいました。これだと後処理が必要だったりして、ちょっと面倒ですよね。 では、Regex.Splitで分割してみます。

using System;
using System.Text;
using System.IO;
using System.Text.RegularExpressions;

namespace split_trial
{
    class Program
    {
        static void Main(string[] args)
        {
            string source = File.ReadAllText("data.txt", Encoding.GetEncoding("shift_jis")); // データ読み込み。

            string pattern = @"\s*\r\n";
            string[] splitted = Regex.Split(source, pattern);

            // ここで実行を停止する。
            foreach(var s in splitted)
            {
                Console.WriteLine(s);
            }
        }
    }
}

分割結果の文字列配列の中身はこのようになります。 170123-1-3 データ末尾の改行コードもセパレータとして捉えられてしまって、分割後の文字列配列に4つ目の要素が作られてしまいます。中身はString.Emptyのようです。 String.Splitのように空のデータを無視するという分割オプションがありませんので、自分で配列をいじるしかありません。 う~ん、String.Splitで分割するのとどっちが良いのだろう。 試した環境は下記です。

  • Visual Studio 2015 Express for Windows Desktop (C#)

  • Windows10

公開日

広告