如何用Regex将空格转逗号但保留CSV的Description字段空格?
解决方案
单行处理公式
针对单个单元格(比如A1),使用以下公式:
=REGEXREPLACE(A1, "^(\S+)\s+(\S+)\s+(.*?)\s+(\S+)\s+(\S+)\s+(\S+)$", "$1,$2,$3,$4,$5,$6")
批量多行处理公式
如果要批量处理多行数据(比如A1:A4),用ARRAYFORMULA结合JOIN实现:
=JOIN(CHAR(10), ARRAYFORMULA(REGEXREPLACE(A1:A4, "^(\S+)\s+(\S+)\s+(.*?)\s+(\S+)\s+(\S+)\s+(\S+)$", "$1,$2,$3,$4,$5,$6")))
正则逻辑说明
^(\S+)\s+(\S+):精准匹配开头的两个无空格字段(交易日期、过账日期),\S+匹配非空格字符,\s+匹配字段间的任意空格\s+(.*?)\s+:非贪婪匹配中间的描述字段,直到遇到后续的无空格数字字段(参考编号),完整保留描述里的原始空格(\S+)\s+(\S+)\s+(\S+)$:匹配末尾三个无空格字段(参考编号、账号、金额),直到行尾- 替换时用
$1,$2,$3,$4,$5,$6将捕获组用逗号分隔,同时保留第三个组的原始空格
验证结果
将样本数据代入公式后,输出与期望结果完全一致:
12/23,12/24,GOOGLE*DOMAINS SUPPORT.GOOGLCA,7811,8550,12.00 01/02,01/04,CREPEVINE - OAKLAND OAKLAND 234567 CA,1087,8220,16.32 01/06,01/07,AB* ABEBOOKS.CO J6YDBX HTTPSWWW.ABEBWA,6289,85332,6.98 01/20,01/21,SQ *BAGEL STREET CAFE Oakland CA,2313,44444,24.43
内容的提问来源于stack exchange,提问作者ManniStudio
相关产品推荐
相关产品推荐

