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)中的任何内容都没有空格,则可以。