2015-02-05 130 views
1

内的特定字符获取Java正则表达式来代替=与#括号之间唱的帮助,我的输入文字是Java的正则表达式替换括号

8=FIX.4.&49=(550=0449)&35=RIO&76=(AB=4560)& 

预期输出字符串

8=FIX.4.&49=(550#0449)&35=RIO&76=(AB#4560)& 

所以会像使用#代替(= 5509)和(AB = 4560),所以输出应该包含(550#0449)和(AB#4560)。

+0

是可能有孤儿或嵌套的“(”和“)”,还是他们总是会有开放和沉重的遗传? – PeonProgrammer 2015-02-05 22:40:19

+0

它可以嵌套,但它会平衡,每个开放(将关闭),所以每个=内部的字符(即使嵌套也需要替换。 – Pramod 2015-02-05 22:46:10

回答

2

我喜欢anubhava的答案,但如果你想更加严格,并断言有非空白项以及打开和关闭括号,捕获的条款和使用反向引用它们写回:

str = str.replaceAll("(\\(\\w+)=(\\w+\\))", "$1#$2"); 
1

您可以使用:

String repl = str.replaceAll("=(?=[^()]*\\))", "#"); 

(?=[^()]*\))是一个超前,将确保匹配=只有当出现以下)它。