2013-05-22 93 views
1

我有串狀的Java字符串分割與demiliters之間連接的字符分隔符

Client Name:##USERNAME## Age:##AGE## xyzed 

我想分裂是這樣

[Client Name:][##USERNAME##][ Age:][##AGE##][ xyzed] 

我想這正則表達式(?=(##(\\w+)##))它返回

[Client Name:][##USERNAME## Age:][##AGE## xyzed] 

由於在java後視不能使用變長,所以不能使用

(?=(##(\\w+)##))|(?<=(##(\\w+)##)) 
+0

你試過'(##(\\ W +?)##)' –

+0

@EugenRieck如果你的意思是不環視,與採用分體式,這將完全刪除'## USERNAME ##'和'# #AGE ##'從輸出,這是不希望的。如果只是添加'?'的意思,我不認爲它會有什麼區別,因爲'#'不是'\ w'的一部分,並且有空格。 – Dukeling

回答

3

如果你是快樂與一個巨大的硬編碼的上限,這將工作:

(?=##\\w+##)|(?<=##\\w{1,1000}##) 

(我也刪除了一些這些多餘的括號)

此:

String string = "Client Name:##USERNAME## Age:##AGE## xyzed"; 
String regex = "(?=##\\w+##)|(?<=##\\w{1,1000}##)"; 
String[] arr = string.split(regex); 
System.out.println(Arrays.asList(arr)); 

打印:

[Client Name:, ##USERNAME##, Age:, ##AGE##, xyzed] 

Test

下面是一個選擇,但它可能是太特定的輸入:

(?=##\\w)|(?=)(?<=##) 

It also works

0

這應該做工精細,只是涉及到全球替代對象:

String Name = "Client Name:##USERNAME## Age:##AGE## xyzed"; 
String[] parts = Name.replaceAll(":##",":@##").replaceAll("## ",":##@ ").split("@"); 
System.out.println(Arrays.asList(parts)); 

打印:

[Client Name:, ##USERNAME:##, Age:, ##AGE:##, xyzed] 

它的閱讀很簡單,但它可能比Dukeling的回答慢