我有一段文本,使用简单的正则表达式
我想知道是否有一种方法可以保留分割后的单词中的空格或换行符,因为我会在一些处理之后用它来进行简单的句子检测。
我正在使用
[ \n]
将其分割成单词。它使用空格和换行符来分隔文本。我想知道是否有一种方法可以保留分割后的单词中的空格或换行符,因为我会在一些处理之后用它来进行简单的句子检测。
我正在使用
String#split
方法。[ \n]
将其分割成单词。它使用空格和换行符来分隔文本。String#split
方法。public class RegexExample{
public static void main(String[] args) {
String s = "firstWordWithSpaceAfter secondWordWithSpaceAfter wordWithLineBreakAfter\nlastWord";
String sa[] = s.split("(?<=[ \\n])");
for (String saa : sa )
System.out.println("[" + saa + "]");
}
}
输出:
[firstWordWithSpaceAfter ]
[secondWordWithSpaceAfter ]
[wordWithLineBreakAfter
]
[lastWord]
?<=
是正则表达式的“look behind”(向后查找)语法,意思是当你查找的表达式前面的数据等于在?<=
之后的正则表达式(在这种情况下为[ \\n]
)时,你就会得到一个匹配。
[ \\n]
是一个正则表达式,意思是[]
中的一个字符。\n
时拆分。\n
,因此它们不会被移除。我认为你唯一的选择是像这样做:
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(" "));
}
就我个人而言,如果正则表达式总是匹配单个字符,您可以使用长度确定它们在原始字符串中的位置。然后,您可以为定界字符获取子字符串。
有点不太规范,但应该能解决问题。
我仍然不确定你想做什么,但如果 \n 与 " " 有不同的含义,你应该分别处理它们。
String[] sentences = text.split("\\n");
...
for (String sentence : sentences) {
...
String[] words = sentence.split(" ");
...
}