【问题标题】:Remove inner double quote in CSV file删除 CSV 文件中的内部双引号
【发布时间】:2014-05-29 10:33:22
【问题描述】:

我有一个 CSV 文件,其中包含数据内的双引号。

EI_SS EI_HDR,"测试文件报告,用于"测试" EI_DT,发送,发送,发送,发送,发送,发送,发送,发送,发送,发送,发送,发送,发送,发送,发送,dt8,发送 EI_COL,"Carrier, Name","Carrier ID","Account Name","Account ID","Group Name","Group ID","Action Code","File ID","Contract","PBP ID ","响应状态","Claim Number","Claim Seq","HICN","Cardholder ID","Date of Service","NDC" "测试载体","MPDH5427","1234","CSNP","TestD"测试","FH14077","","PD14079042","H5427","077","REJ","133658279751004", "999","304443938A","P0002067501",01/01/2014,"50742010110","C" “测试,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(如果不可能,则删除那些内引号。

请帮我解决这个问题。

【问题讨论】:

  • 很容易替换 '\" ' - 但这足够了吗?
  • 这不是一个有效的 CSV 文件。解决方案:修复产生此输出的系统。
  • 嗨 Java1,我需要保留外部引号。嗨,邓肯,现在我提供了真实数据。

标签: java regex csv


【解决方案1】:

如果您的数据只有一个双引号:,"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",

希望这会有所帮助。

【讨论】:

    【解决方案2】:

    首先你为什么不使用正则表达式的正确字符?

    实际上有一个字符:\w 这意味着[a-zA-Z_0-9] 而不是你的[a-zA-Z0-9](完全一样,只是添加 _ 但我认为更具可读性^^)

    对于您的模式,正如其他人所说,最好的方法是首先纠正您生成 csv 的方式;)

    【讨论】:

    • 嗨 Clad,我一定会尝试使用 \w。但这并不能解决我的问题。我必须保持逗号完整并删除内部引号。
    【解决方案3】:

    我认为这是不可能的,因为你划分两个值的方式是模棱两可的。比如下面的值如何拆分?

    ""I am", "a single", ", value""
    

    它的意思是:

    I am
    a single
    , value
    

    I am
    a single, , value
    

    甚至

    I am, a single, , value
    

    ?

    【讨论】:

    • +1 这就是问题所在。输入文件不是有效的 CSV,它不明确,无法解析。
    猜你喜欢
    • 2018-07-27
    • 2014-05-05
    • 1970-01-01
    • 1970-01-01
    • 2022-01-20
    • 2016-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多