在Tcl中处理引用字符串中的逗号

Roa*_*alt 1 regex csv tcl

我在Tcl中使用以下行来解析以逗号分隔的字段行.可以引用某些字段,以便它们可以包含逗号:

set line {12,"34","56"}
set fresult [regsub -all {(\")([^\"]+)(\",)|([^,\"]+),} $line {{\2\4} } fields]
puts $fields
{12} {34} "56"
Run Code Online (Sandbox Code Playgroud)

(引用最后一个字段而不是括号,这有点奇怪,但这不是问题)

但是,当引号中有逗号时,它不起作用:

set line {12,"34","56,78"}
set fresult [regsub -all {(\")([^\"]+)(\",)|([^,\"]+),} $line {{\2\4} } fields]
puts $fields
{12} {34} "{56} 78"
Run Code Online (Sandbox Code Playgroud)

我希望:{12} {34} {56,78}

我的正则表达式有什么问题或者有什么东西正在进行吗?

小智 5

想到的一个选项是在TclLib中使用CSV功能.(没有理由重新发明轮子,除非你必须......)

http://tcllib.sourceforge.net/doc/csv.html

文件摘录

:: csv :: split? - 替代?线{sepChar,} {delChar"} CSV格式的线转换成包含在所述行中的值的列表.字符用来分隔值彼此可以由呼叫者经由sepChar来限定,但这是可选的默认为",".引用字符可由调用者定义,但这是可选的.默认为"".如果选项-alternate是spcified,则使用稍微不同的语法来解析输入.下面在FORMAT部分解释了此语法.