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

问题描述 投票:0回答:1

我试图在各种各样的文本中开始和结束段落的索引位置。我正在使用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正在删除换行符,因为它接受了之前的所有内容,所以我想我需要更改它并更新我的正则表达式。

思考?

java regex text
1个回答
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?"

© www.soinside.com 2019 - 2024. All rights reserved.