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

cl-ppcre正则表达式引号转义方法咨询,用于CSV解析场景

问题解决

核心错误

你误用了ppcre:split函数:你写的正则是用来匹配CSV字段本身,而split是把正则匹配到的内容作为分隔符切掉,返回剩下的内容,所以你整个字符串都被正则匹配后,自然返回空列表,和引号转义无关。

正确实现方式

方案1:直接匹配所有CSV字段(更简单)

用ppcre:all-matches-as-strings直接提取所有匹配到的字段,Common Lisp字符串里双引号仅需单个反斜杠转义即可,示例代码如下:

(defparameter bads "\"AER\",\"BenderlyZwick\",\"Benderly and Zwick Data: Inflation, Growth and Stock returns\",31,5,0,0,0,0,5,\"https://vincentarelbundock.github.io/Rdatasets/csv/AER/BenderlyZwick.csv\",\"https://vincentarelbundock.github.io/Rdatasets/doc/AER/BenderlyZwick.html\"")

;; 匹配所有CSV字段,兼容空字段
(ppcre:all-matches-as-strings "(\"[^\"]*\"|[^,]*)" bads)

如果需要去掉字段首尾的引号和多余空格,可以后续加一层字符串处理即可。

方案2:用split按分隔符切割

如果你坚持要用split,需要把正则改成匹配不在引号内的逗号(也就是真正的字段分隔符),示例代码如下:

;; 匹配作为分隔符的逗号
(ppcre:split ",(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)" bads)

补充说明

你之前测试的解析树写法本身没有问题,错误原因同样是误用了split函数,换成ppcre:all-matches或ppcre:all-matches-as-strings即可正常返回结果。

内容的提问来源于stack exchange,提问作者CL-USER

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 04:06:03