次の例では、Regex.Splitメソッドを用いて、\r\n
, \r
, \n
のいずれかを改行とみなして文字列を行毎に分割しています。
Regex.Splitメソッドを使って複数の改行文字を区切りとして文字列を行ごとに分割する
Imports System
Imports System.Text.RegularExpressions
Class Sample
Shared Sub Main()
Dim text As String = "1行目" + vbCrLf + "2行目" + vbLf + "3行目" + vbCr + "4行目" + vbLf + vbCr + "6行目"
' "\r\n", "\r", "\n"を改行文字として、文字列を行ごとに分割する
Dim lines() As String = Regex.Split(text, "\r\n|\r|\n")
For Each line As String In lines
Console.WriteLine(line)
Next
End Sub
End Class
実行結果
1行目 2行目 3行目 4行目 6行目
Regex.Splitメソッドでは、区切りの正規表現がグループ化されているか・キャプチャされるグループかどうかによって、区切りの文字列となる文字列も含めて返されるかどうかが変わります。 上記の例において、区切りの正規表現を(\r\n|\r|\n)
のようにカッコで括ってグループ化すると、Regex.Splitメソッドは正規表現にマッチした部分の文字列も含めて返すようになります。 この動作について詳しくは正規表現の構造化および処理(マッチ・グループ・キャプチャ) §.グループ化された正規表現による分割 (Regex.Split)で解説しています。
\r
, \n
, \r\n
が混在する文字列の分割はTextReaderを使うことでも行えます。 例として、StringReaderを使った行分割は次のように行うことができます。
StringReaderを使って文字列を行ごとに分割する
using System;
using System.IO;
class Sample {
static void Main()
{
var text = "1行目\r\n2行目\n3行目\r4行目\n\r6行目";
var r = new StringReader(text);
for (;;) {
var line = r.ReadLine();
if (line == null) break;
Console.WriteLine(line);
}
}
}
StringReaderを使って文字列を行ごとに分割する
Imports System
Imports System.IO
Class Sample
Shared Sub Main()
Dim text As String = "1行目" + vbCrLf + "2行目" + vbLf + "3行目" + vbCr + "4行目" + vbLf + vbCr + "6行目"
Dim r As New StringReader(text)
Do
Dim line As String = r.ReadLine()
If line Is Nothing Then Exit Do
Console.WriteLine(line)
Loop
End Sub
End Class
TextReaderを使った行ごとの読み込みに関してはStreamReaderクラス・StreamWriterクラス §.1行ずつの読み込み (ReadLine)、StringReaderについてはStringReaderクラス/StringWriterクラス §.StringReaderクラスで解説しています。