2013-10-27 16 views
1

我試圖編寫一個正則表達式來捕獲所有內容,直到點或逗號,並且我使用命名組來做到這一點。捕獲一切,直到使用命名組的特定字符

這是我有:

String pattern = "(?<Words>(?=,|.))"; 
String text = "Part one, part two. Part three"; 
Matcher m = Pattern.compile(pattern).matcher(text); 
while (m.find()) { 
    System.out.println(m.group("Words")); 
} 

我想捕捉「一個部分」,因爲它是第一個逗號之前的一切。然後捕獲所有內容,直到第一個點爲「第二部分」。在我的代碼中的正則表達式似乎並沒有工作,它不輸出任何東西,我不知道我在這裏錯過了什麼。

回答

1

如果你要調整你的代碼工作,在這裏你去:

String pattern = "(?<Words>[^ ,.][^,.]*(?=(,|\\.)))"; 
String text = "Part one, part two. Part three"; 
Matcher m = Pattern.compile(pattern).matcher(text); 
while (m.find()) { 
    System.out.println(m.group("Words")); 
} 

[^ ,.]說,與非空格,逗號或句號
[^,.]*開始說的非任意量逗號或句點字符
(?=(,|\\.))是逗號或句點的積極向前,因爲.在正則表達式中是一個特殊字符,意思是「除了換行符之外的任何內容」

你的行爲不起作用,因爲在積極預見之前你什麼都沒有。

0

如何使用方法String.split來代替這裏。

String pattern = "[,|\\.]"; 
    String text = "Part one, part two. Part three"; 
    String[] strsBySplit = text.split(pattern); 
    for (String s : strsBySplit) { 
     System.out.println(s.trim()); 
    } 
+0

您不需要在字符類中轉義或使用'|',即''[,。]「'就是您所需要的。 –

+0

此外,這得到「第三部分」。 –

相關問題