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