Java用单行正则+replaceAll处理CSV多余双层双引号方案求助
Java 适配正则解决方案
核心正则表达式
你可以直接使用下方正则配合replaceAll方法实现需求,默认满足单行匹配要求,不会跨行处理内容:
"[\s\"]*([^\"]*?)[\s\"]*"
在Java字符串中使用时需要对双引号和反斜杠转义,最终转义后的正则写法为:
"\"[\\s\\\"]*([^\\\"]*?)[\\s\\\"]*\""
完整代码示例
public class CsvQuoteFix { public static void main(String[] args) { String rawCsv = "\"\"demo\"\",\"\"kkkk\"\"\n" + "\"\"demo \" \",\"fg\"\n" + "\" \" demo\" \"\n" + "\"demo\"\n" + "\"value1\",\"\" frg\" \",\"vaue5\"\n" + "\"val3\",\"\"tttyy \" \",\"\"hjhj\",\"ghuy\""; String fixedCsv = rawCsv.replaceAll("\"[\\s\\\"]*([^\\\"]*?)[\\s\\\"]*\"", "\"$1\""); System.out.println(fixedCsv); } }
正则逻辑说明
- 开头的
"匹配字段最左侧的双引号 [\s\"]*匹配左引号后任意数量的空格、多余双引号([^\"]*?)为非贪婪捕获组,提取字段的实际内容(不含双引号)[\s\"]*匹配实际内容右侧任意数量的空格、多余双引号- 结尾的
"匹配字段最右侧的双引号 - 替换逻辑为用一对双引号直接包裹捕获到的实际字段内容,自动去掉所有多余空格和引号
内容的提问来源于stack exchange,提问作者Pallab
相关产品推荐
相关产品推荐

