正则表达式分割CSV

前端之家收集整理的这篇文章主要介绍了正则表达式分割CSV前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我知道这个(或类似的)已经被问了很多次,但是尝试了许多可能性,我没有找到一个正常工作100%的正则表达式。

我有一个CSV文件,我试图将它拆分成一个数组,但遇到两个问题:引用逗号和空元素。

CSV看起来像:

123,2.99,AMO024,Title,"Description,more info",123987564

我试图使用的正则表达式是:

thisLine.split(/,(?=(?:[^\"]*\"[^\"]*\")*(?![^\"]*\"))/)

唯一的问题是在我的输出数组中,第5个元素出现为123987564而不是一个空字符串。

描述

而不是使用分割,我认为简单地执行匹配并处理所有找到的匹配会更容易。

这个表达式将:

>在逗号分隔上划分示例文本
>将处理空值
>将忽略双引号逗号,提供双引号不嵌套
>从返回的值修剪定界逗号
>从返回值修剪周围的引号

正则表达式:(?:^ |,)(?= [^“] |(”)?“”((?(1)[^“] * | [^,”] *)) | $)

示例文本

123,123987564

ASP示例使用非java表达式

Set regEx = New RegExp
regEx.Global = True
regEx.IgnoreCase = True
regEx.MultiLine = True
sourcestring = "your source string"
regEx.Pattern = "(?:^|,)(?=[^""]|("")?)""?((?(1)[^""]*|[^,""]*))""?(?=,|$)"
Set Matches = regEx.Execute(sourcestring)
  For z = 0 to Matches.Count-1
    results = results & "Matches(" & z & ") = " & chr(34) & Server.HTMLEncode(Matches(z)) & chr(34) & chr(13)
    For zz = 0 to Matches(z).SubMatches.Count-1
      results = results & "Matches(" & z & ").SubMatches(" & zz & ") = " & chr(34) & Server.HTMLEncode(Matches(z).SubMatches(zz)) & chr(34) & chr(13)
    next
    results=Left(results,Len(results)-1) & chr(13)
  next
Response.Write "<pre>" & results

使用非java表达式匹配

组0获取包含逗号的整个子字符串
如果使用组1,报价
组2获取包括逗号的值

[0][0] = 123
[0][1] = 
[0][2] = 123

[1][0] =,2.99
[1][1] = 
[1][2] = 2.99

[2][0] =,AMO024
[2][1] = 
[2][2] = AMO024

[3][0] =,Title
[3][1] = 
[3][2] = Title

[4][0] =,more info"
[4][1] = "
[4][2] = Description,more info

[5][0] =,[5][1] = 
[5][2] = 

[6][0] =,123987564
[6][1] = 
[6][2] = 123987564

猜你在找的正则表达式相关文章