Java 用于为特定字段放置双引号的正则表达式

Java 用于为特定字段放置双引号的正则表达式,java,regex,Java,Regex,我有这样一个字符串: String a = 'ABC(rfg) OR DEF(3dsgf56737(fg)sdg) OR KLM(dfgrg) AND DEF(ghthd)'; 我想为DEF字段单独加上双引号: String a = 'ABC(rfg) OR DEF("3dsgf56737(fg)sdg") OR KLM(dfgrg) AND DEF("ghthd")'; 你用什么工具来做这件事?塞德?python爪哇 可以与(eg)sed一起使用的正则表达式是: 's/DEF\((([^(

我有这样一个字符串:

String a = 'ABC(rfg) OR DEF(3dsgf56737(fg)sdg) OR KLM(dfgrg) AND DEF(ghthd)';
我想为DEF字段单独加上双引号:

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

你用什么工具来做这件事?塞德?python爪哇

可以与(eg)
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,我给出的正则表达式都是一样的。

您可以试试

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

如果您使用的是Java,那么您想要获得的结果甚至不会被编译

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

您还必须避开DEF中的“0”,这可以通过稍微更改上面建议的正则表达式来实现

如果括号中有空格,则不起作用。如果已知DEF(xxx)中的任何内容都没有空格,则可以。