2014-03-31 24 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

相关问题