代码之家  ›  专栏  ›  技术社区  ›  Aditya

针对CSV的Regex,我做错了什么

  •  0
  • Aditya  · 技术社区  · 6 年前

    我使用了以下正则表达式:

    ^(.*?,){5}"",
    

    但它符合这一点:

    a,b,c,d,e,""
    

    也与此匹配:

    a,b,c,d,e,f,g,"",
    

    1 回复  |  直到 6 年前
        1
  •  1
  •   The fourth bird    6 年前

    你的正则表达式 ^(.*?,){5}"" 使用非贪婪部分 (.*?,) 前4次匹配 a,b,c,d, . 在第五次的时候它试图匹配 e, 然后 ""

    在第五次重复中这个部分 尝试至少匹配任何字符(也可以是逗号本身,因为点也匹配逗号),后跟逗号,直到遇到双引号,使其匹配 e,f,g, .

    character class 后跟重复4次的模式,该模式匹配逗号,后跟再次匹配非逗号,然后匹配 ""

    $

    ^[^,\r\n]+(?:,[^,\r\n]+){4},""(?:,[^,\r\n]+)*$