我有一个CSV文件,其中包含数据中的双引号。
EI_SS EI_HDR,“测试文件报告,用于”测试“ EI_DT,TX,TX,TX,TX,TX,TX,TX,TX,TX,TX,TX,TX,TX,TX,TX,DT8,TX EI_COL,“运营商,名称”,“运营商ID”,“帐户名称”,“帐户ID”,“组名”,“组ID”,“行动代码”,“文件ID”,“合同”,“PBP ID “,”响应状态“,”索赔号“,”索赔序号“,”HICN“,”持卡人ID“,”服务日期“,”NDC“ “Test Carrier”,“MPDH5427”,“1234”,“CSNP”,“TestD”Test“,”FH14077“,”“,”PD14079042“,”H5427“,”077“,”REJ“,”133658279751004“, “999”,“304443938A”,“P0002067501”,01/01/2014,“50742010110”,“C” “Test,Carrier1”,“BCRIMA”,“Carrier”,“14”,“123333”,“00000MCA0014001”,“”,“PD14024142”,“H4152”,“013”,“REJ”,“133658317280023”,“ 999“,”035225520A“,”ZBM200416667“,01/01/2014,”00378350505“
更新的实际CSV
现在我想从这些数据中删除内部引号,但需要为每个数据保留外部双引号。
对于处理文件,我使用"\"[a-zA-Z0-9 ]+[,][ a-zA-Z0-9]+\""
模式来分割文件。但如果任何行中有任何内部引用,则代码会中断。
我需要通过保留逗号并替换内部引号将其转换为XLSX(如果不可能,则删除那些内部引号。
请帮我解决这个问题。
答案 0 :(得分:2)
我认为这是不可能的,因为划分两个值的方式是模棱两可的。例如,如何拆分以下值?
""I am", "a single", ", value""
是否意味着:
I am
a single
, value
或
I am
a single, , value
甚至
I am, a single, , value
答案 1 :(得分:0)
首先为什么不使用正则表达式的正确字符?
实际上有一个字符:\w
表示[a-zA-Z_0-9]
而非[a-zA-Z0-9]
(完全相同,只是添加_但更可读,我认为^^)
对于你的模式,正如其他人所说,最好的方法是首先纠正你生成csv的方式;)
答案 2 :(得分:0)
如果您的数据只有一个双引号:" abc" def", - 以下应该有所帮助:
的test.txt " ABC"" DEF" GH"" IJK" " LMN"" O" PQ"" RST"
sed -i' s /([^,])\"([^,])/ \ 1 \" \" \ 2 / g'的test.txt
上面的命令查找一组与模式匹配的3个字符 - ?"?哪里?什么都不是逗号。意思是 - 搜索3个不喜欢的字符,",并替换"用""
命令拆分: ([^,]) - 不是逗号的字符 - ()用于记住此字符 \" - 双重报价 \ 1 - 记住的第一个字符 \ 2 - 记住的第二个字符。
注意:如果封装中有两个双引号,则不起作用。上面的命令没有逃脱" in," a" b" cc",
希望这有点帮助。