【发布时间】:2017-09-04 01:11:54
【问题描述】:
我正在尝试使用 TCL 正则表达式解析简化的 CSV 格式。我选择 regexp 而不是 split 来执行基本的格式合规性测试。
我的问题是我想使用计数量词,但想从匹配中排除“,”。
我的测试线:
set line "2017/08/21 16:06:20.0, REALTIME, late by 0.3, EOS450D, 1/640, F/8.0, ISO 100, Partial 450D 0.0%"
到目前为止我有:
regexp -all {(?:([^\,]*)\,){8}} $line dummy date tm off cam exp fnum iso com
我的思考过程是: 获取下一个逗号之前所有非逗号字符的匹配组。 现在我想匹配这 8 次,所以我将它放入一个非捕获组,然后是一个计数量词。但这违背了目的,因为现在没有任何东西是匹配的。我需要的是一种让匹配通过 CSV 8 次并捕获文本而不是逗号的方法。
我的 CSV 简化如下。 CSV 中没有带引号的字符串 CSV 中没有空条目
我已经检查了谷歌的 csv 匹配,但由于 CSV 内容中允许特殊情况,大多数点击都被夸大了。
谢谢, 格特
【问题讨论】:
-
我现在无法测试,但查看代码似乎很可能因为最后一个字段后没有逗号而窒息(这是正确的)。我强烈建议使用 Tcllib 中的 csv 包来处理甚至简化的 csv。