2017-12-19 10 views
0

私は段落のインデックスの位置をテキストの品揃えで取得しようとしています。パターンとマッチャーのクラスを使用していて、パターンを設定する方法を理解する上で問題があります。現在私は使用しています正規表現を使用して段落別にテキストを区切る

Pattern p = Pattern.compile(".+", Pattern.MULTILINE); 

段落を区切ります。これは動作しますが、改行文字は削除されます。改行文字を保持する方法はありますか?私が最初にした後のパラグラフのための私のインデックスを意味している今、新しい行が取り除かれます、前に言ったように私は...このような何かに

"This is paragraph1\n" 
"This is paragraph2\n" 
"This is paragraph3\n" 

を分離するために...

"This is paragraph1\nThis is paragraph2\nThis is paragraph3\n" 

をしたいと思いますオフにする。私はPattern.MULTILINEがそれ以前のものすべてを受け入れるので改行を取り除いていると思うので、それを変更して正規表現を更新する必要があると思います。

思考?

+4

'MULTILINE'はドットが改行にマッチすることを意味しません。 ['DOTALL'](https://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html#DOTALL)にあります。 –

+1

類似の質問がここで尋ねられ、回答しましたhttps://stackoverflow.com/a/3652392/8934442 –

+0

[正規表現を使用して複数行のテキストに一致]の複製が可能です(https://stackoverflow.com/questions/3651725/match-multiline-text)。 -using-regular-expression) –

答えて

0

あなただけの改行文字以外の文字1+後(\R構築物で)改行を一致させる必要があります。

["This is paragraph1\n", "This is paragraph2\n", "This is paragraph3\n"] 

String s = "This is paragraph1\r\nThis is paragraph2\nThis is paragraph3\n"; 
List<String> items = new ArrayList<>(); 
Matcher m = Pattern.compile(".+\\R").matcher(s); 
while (m.find()) { 
    items.add(m.group()); 
} 
System.out.println(items); 

Java demo

出力を参照してください。改行が省略可能な場合は、\\Rの後に?の限定子を追加します。".+\\R?"

関連する問題