You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Java正则环视与非捕获组提取含内部双引号的CSV列

解决非标准带引号CSV的列提取问题

试试这个正则表达式,完全符合你的要求(仅用环视和非捕获组,无需捕获组):

(?<=^|,)"(?:[^"]|(?:""))*"(?=$|,)

正则说明

  • (?<=^|,):正向预查,确保当前列的前导是行开头或者逗号,能匹配第一列和中间列的起始位置
  • ":匹配列开头的双引号
  • (?:[^"]|(?:""))*:非捕获组,负责匹配列内部内容:
    • [^"]:匹配任意非双引号的字符
    • (?:""):匹配两个连续的双引号(CSV中用来表示列内的单个双引号)
    • *:允许上述内容重复任意次数,覆盖所有列内情况
  • ":匹配列结尾的双引号
  • (?=$|,):正向预查,确保当前列的后续是行结尾或者逗号,能匹配中间列和最后一列的结束位置

为什么原正则不行

你之前用的(?<=,).*?(?=,)有两个关键问题:

  1. 无法匹配第一列(前面没有逗号)和最后一列(后面没有逗号)
  2. 虽然在测试字符串中能匹配部分中间列,但严格来说没有遵循CSV带引号列的规则,若后续出现列内包含逗号的情况,非贪婪匹配会提前截断内容,而新正则能精准识别配对的双引号边界

用这个正则匹配你的测试字符串:
"AAA","BBB","CCC","DDD","EE""E","FFF","GGGGG","HHHHHHHHHHHHHHHH"
会精准提取出每一列的完整内容:"AAA"、"BBB"、"CCC"、"DDD"、"EE""E"、"FFF"、"GGGGG"、"HHHHHHHHHHHHHHHH"

内容的提问来源于stack exchange,提问作者Dan Pickard

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 02:07:04