Java 如何使用正则表达式拆分文本,但拆分的单词仍保留正则表达式分隔符?

Java 如何使用正则表达式拆分文本,但拆分的单词仍保留正则表达式分隔符?,java,regex,split,sentence,Java,Regex,Split,Sentence,我有一个文本,使用这个简单的正则表达式将其拆分为单词:[\n]。它使用空格和换行符将文本拆分为单词 我想知道是否有办法在拆分的单词中保留空格或换行符,因为经过一些处理后,我将使用它进行简单的句子检测 我使用的是String#split方法。考虑使用零宽度正后向/前向。查看特殊构造(非捕获)我认为您唯一的选择是执行以下操作: String myString = "Joe Blow\n1234 Fake Road\nHere, There, 12345"; String[] lines = mySt

我有一个文本,使用这个简单的正则表达式将其拆分为单词:
[\n]
。它使用空格和换行符将文本拆分为单词

我想知道是否有办法在拆分的单词中保留空格或换行符,因为经过一些处理后,我将使用它进行简单的句子检测


我使用的是
String#split
方法。

考虑使用零宽度正后向/前向。查看特殊构造(非捕获)

我认为您唯一的选择是执行以下操作:

String myString = "Joe Blow\n1234 Fake Road\nHere, There, 12345";
String[] lines = myString.split("\\n");
Set<String[]> wordsByLine = new LinkedHashSet<String[]>();
for (String line : lines) {
  wordsByline.add(line.split(" "));
}
String myString=“Joe Blow\n1234 Fake Road\nHere,那里,12345”;
字符串[]行=myString.split(\\n“);
Set wordsByLine=newlinkedhashset();
用于(字符串行:行){
wordsByline.add(line.split(“”));
}

如果正则表达式总是匹配单个字符,那么可以使用长度来确定它们在原始字符串中的位置。然后,可以为定界字符取一个子字符串


有点脏,但应该可以做到。

您可以使用@Piotr Findeisen建议的lookback(+1):

简要说明:


?我仍然不确定您想做什么,但是\n是否有不同的含义
而不是“”,则应分别处理

String[] sentences = text.split("\\n");
...
for (String sentence : sentences) {
    ...
    String[] words = sentence.split(" ");
    ...
}

您的\n是否有特殊含义(句末)?你不能用“.”作为句子的结尾处理多行的正常段落?@toto2标点符号也用于确定句子的结尾,但内容来自HTML内容,因此许多句子(如title)没有标点符号来确定句子的结尾,只有换行符。我不确定您在处理HTML时是否应该依赖\n,因为您可以在没有单个\n的情况下获得完美的文档。@TOTOTO2我正在处理的文本来自Boilerpipe API(一个外部HTML处理器),它包含根据HTML内容的换行符。@Renato Dinhani Concição-我不是正则表达式专家,但我希望他说得够清楚。你把正则表达式放在括号里。这是必要的?是的,我忘了提到,这是回顾的一部分。谢谢你的回答和解释。工作!:D
[firstWordWithSpaceAfter ]
[secondWordWithSpaceAfter ]
[wordWithLineBreakAfter
]
[lastWord]
String[] sentences = text.split("\\n");
...
for (String sentence : sentences) {
    ...
    String[] words = sentence.split(" ");
    ...
}