如何在useDelimiter()方法中规避引号并正确分割带引号的CSV内容?
处理带引号的CSV格式数据,提取结构化对象
需求背景
我有一个存储特定格式内容的文件,示例内容如下:
"Dude1", 17, student Dude2, 23, worker "Dude, Dude", 11, student
需要从中提取结构化对象,期望输出如下:
Object1: name: Dude1 age: 17 work: student Object2: name: Dude2 age: 23 work: worker Object3: name: Dude, Dude age: 11 work: student
已知需用正则表达式作为分隔符,但不清楚具体写法,请问应使用何种分隔符来避免保留引号且不拆分引号内的字符串?
解决方案
你可以使用匹配**引号外部逗号(含前后空格)**的正则作为分隔符,同时配合简单的字符串处理去掉引号。
核心正则分隔符
\s*,\s*(?=(?:[^"]*"[^"]*")*[^"]*$)
正则解释
\s*,\s*:匹配逗号以及前后任意数量的空格,兼容数据里的空格格式(?=(?:[^"]*"[^"]*")*[^"]*$):正向预查逻辑,确保当前逗号后面的引号总数是偶数——也就是说,这个逗号不在成对引号的内部,不会拆分引号里的内容
后续处理(以Python为例)
拆分后只需对字段做个简单的引号去除处理,就能得到干净的内容:
import re # 读取每行数据示例 lines = [ '"Dude1", 17, student', 'Dude2, 23, worker', '"Dude, Dude", 11, student' ] for idx, line in enumerate(lines, 1): # 用正则拆分字段 fields = re.split(r'\s*,\s*(?=(?:[^"]*"[^"]*")*[^"]*$)', line) # 去掉字段两端的引号(如果有的话) name, age, work = [f.strip('"') for f in fields] # 输出目标格式 print(f"Object{idx}:") print(f"name: {name}") print(f"age: {age}") print(f"work: {work}\n")
运行这段代码就能得到你期望的输出结果。
内容的提问来源于stack exchange,提问作者du11ard
相关产品推荐
相关产品推荐

