2014-03-31 23 views
0

我要替換除了在使用Java regex.I雙引號所有逗號我除外輸出作爲\"Lee Rounded Neck, Printed\"#410.00#300.00#\"Red Blue\"#lee"正則表達式替換所有的逗號,除了雙引號括起來的Java

String line="\"Lee Rounded Neck, Printed\" 410.00 300.00,\"Red Blue\",lee"; 
    String repl = line.replaceAll("(?!\")\\,", "#"); 
    System.out.println("Replaced => " + repl); 

但我正在逐漸"Lee Rounded Neck# Printed" 410.00 300.00#"Red Blue"#lee

請人幫我在這方面

+0

下面是它會怎樣看在Perl:'S /((?:[^」] | 「(?:[^」 \\] | \\)*「)*)/ $ 1號/ g'。這也允許'''在''''引用的字符串中被反斜線轉義。 '$ 1'是指第一個括號表達式;我期望有一種方法可以在Java中表達這一點。 –

回答

2

與嘗試,

line.replaceAll(",(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)", "#"); 

enter image description here

1

沒有正則表達式:

String line="\"Lee Rounded Neck, Printed\" 410.00 300.00,\"Red Blue\",lee"; 
System.out.println(line); 

char[] line2 = line.toCharArray(); 
boolean insideQuotes = false; 
for (int i = 0; i < line.length(); ++i) { 
    if (line.charAt(i) == '\"') 
    insideQuotes = !insideQuotes; 
    else if (line.charAt(i) == ',' && !insideQuotes) 
    line2[i] = '#'; 
} 
line = String.valueOf(line2); 
System.out.println(line); 

輸出:

"Lee Rounded Neck, Printed" 410.00 300.00,"Red Blue",lee 
"Lee Rounded Neck, Printed" 410.00 300.00#"Red Blue"#lee 

Ideone

相關問題