使用正则表达式逐段分隔文本

时间:2017-12-19 15:51:29

标签: java regex text

我正试图在各种各样的文本中开始和结束段落的索引位置。我正在使用Pattern和Matcher类,并且在理解如何设置模式方面遇到了一些问题。目前我正在使用

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

分开段落。这样可行,但新行字符被剥离。有没有办法保持换行符?我想......

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

分开这样的东西......

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

正如我之前所说的那样,现在新线被剥离,这意味着我的第一个段落后的段落索引。我认为Pattern.MULTILINE正在删除换行符,因为它接受了之前的所有内容,所以我想我需要更改它并更新我的正则表达式。

思想?

1 个答案:

答案 0 :(得分:0)

你需要在除了换行符之外的1+个字符之后匹配换行符(使用\R构造):

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

输出:

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

如果换行符是可选的,请在?之后添加\\R量词:".+\\R?"