2011-12-02 53 views

回答

1

您可以尝试

String b = a.replaceAll("DEF\\((\\S+)\\)", "DEF(\"$1\")"); 
System.out.println(b); 
+0

如果括号中有空格将不会工作如果知道DEF(xxx)中的任何内容都没有空格,那么没关系。 –

1

什么工具,你用做这个? SED?蟒蛇? Java的?

一个正则表达式您可以与使用(例如)sed是:

's/DEF\((([^(]*|\([^)]*\))+)\)/DEF("\1")/g' 

g装置全局匹配,并在DEF位基本上搜索外层一个(在(fg)内配对括号的你的例子)或其他非括号。

当然,你会定制正则表达式来你的特殊情况 - 例如,如果你只指望那里是字母数字和括号内的DEF里面,然后而不是[^(]你可以使用[a-z0-9]

@NullUserException的评论仍然是相关的 - 虽然你标记了java和python这个问题,但是没有指定你打算使用哪种工具/语言?

例如,你可以使用SED:

echo 'ABC(rgt) ... etc' | sed -r -e 's/DEF\((([^(]*|\([^)]*\))+)\)/DEF("\1")/g' 

在任何情况下,无论是使用Java或Python,我已经给了正则表达式将是一样的。

+0

我正在使用java .. – Narayanan

0

如果您使用的是Java,你想获得的结果甚至不会编译

String a = "ABC(rfg) OR DEF("3dsgf56737(fg)sdg") OR KLM(dfgrg) AND DEF("ghthd")"; 

你将不得不逃离“的DEF为好,这可以通过稍微改变上面建议的正则表达式来实现