我有一個文本,並使用這個簡單的正則表達式來分割它的文字:[ \n]
。它使用空格和換行符將文本分割成單詞。如何使用正則表達式分割文本,但分割的單詞繼續保持正則表達式分隔符?
我想知道是否有一種方法來保留拆分詞中的空格或換行符,因爲我將在處理後使用它來進行簡單的句子檢測。我正在使用String#split
方法。
我有一個文本,並使用這個簡單的正則表達式來分割它的文字:[ \n]
。它使用空格和換行符將文本分割成單詞。如何使用正則表達式分割文本,但分割的單詞繼續保持正則表達式分隔符?
我想知道是否有一種方法來保留拆分詞中的空格或換行符,因爲我將在處理後使用它來進行簡單的句子檢測。我正在使用String#split
方法。
您可以使用回顧後作爲@Piotr Findeisen提示(+1):
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]
簡短說明:
?<=
是向後看,這意味着你得到了一個如果您正在查找的表達式之前的數據等於?<=
之後的正則表達式(在此例中爲[ \\n]
)
[ \\n]
是正則表達式,這意味着在[]
字符一個所以整個正則表達式的每個,所述表達/字之前的字符是空間或時間\n
說分裂。
由於我們沒有嘗試匹配空間或\n
,它不會刪除它們。
這似乎工作,但...你能解釋正則表達式嗎? –
@Renato DinhaniConceição - 我不是正則表達式專家,但我希望他的編輯足夠清晰。 – MByD
你把你的正則表達式放在括號內。這是必要的? –
考慮使用零寬度積極lookbehind/lookahead。見Pattern javadoc各地的特殊結構(非捕獲)
我認爲你唯一的選擇就是做這樣的事情:
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(" ");
...
}
你的\ n是否意味着什麼特別的東西(句尾)?您沒有使用「。」在多行上處理正常段落。作爲句子的結尾? – toto2
@ toto2標點符號也用於確定句子結尾,但內容來自HTML內容,因此諸如標題這樣的許多句子沒有標點符號來確定句子結束的位置,只有換行符。 –
我不確定您在處理HTML時應該依賴\ n,因爲您可以擁有完美的文檔而無需使用\ n。 – toto2