有一个数据文件,每条记录都是逗号隔开,如果记录本身含有逗号,就用双引号引起来。请问怎么优雅地用正则表达式分割记录?
1
emric 2021-06-23 06:36:26 +08:00
[^\,]+|\".+\"
可行,但不知道是不是最优雅。 |
2
jupiter157 OP @emric 谢谢。测试无效,但是受你启发改成这样可行了:[^\,\"]+|\"[^\"]+\"
|
3
Mutoo 2021-06-23 07:13:50 +08:00
|
4
toaruScar 2021-06-23 08:06:34 +08:00 via iPhone
可以用 lookahead 和 lookbehind ?
https://regular-expressions.mobi/lookaround.html?wlr=1 |
5
balabalaguguji 2021-06-23 09:34:21 +08:00
|
6
noqwerty 2021-06-23 09:38:23 +08:00 via Android
找个 csv parser 不香吗😂
|
7
mingl0280 2021-06-23 09:48:05 +08:00 via Android
找个 csv 解析库,csv 不仅有逗号问题的。还有引号重复的问题。例如
","作为值…… |
8
dongtingyue 2021-06-23 09:53:26 +08:00
先根据逗号分隔成数组,然后循环判断前后是否是引号再拼接。这样效率应该比正则快。
|
9
tsanie 2021-06-23 10:03:20 +08:00
数据文件以逗号分隔这类的最好存储的时候先 encode,如果控制不了来源的话那就找 parser 吧
|
10
wangyzj 2021-06-23 10:03:30 +08:00
(?!\")\,(?!\")
|
11
wangyzj 2021-06-23 10:04:09 +08:00
但我更喜欢 notepad 全局替换后再单独处理
不想费脑子 |
12
yuancoder 2021-06-23 10:14:12 +08:00
$str = 'aaaa","bbb,cccc",",dddd';
$arr = preg_split('/(?!"),(?!")/', $str); print_r($arr); -------------------------------- Array ( [0] => aaaa","bbb [1] => cccc"," [2] => dddd ) 这样可以吗 |
13
jindaxia 2021-06-23 10:22:30 +08:00
不就是 csv 格式吗?后缀改成 csv 用 excel 打开!
|
14
toaruScar 2021-06-23 10:44:34 +08:00
https://regex101.com/r/Xg0Qxq/1
这样连 Capture group 都整理好了 |