求解析CSV的正则表达式

chlei 2008-09-05 12:40:47
能够解析类似下面的文本

a,b,"a,2","123""456",,"AAA
BBB",1000
100,200,"3,000",400,500,600

结果为
[1,1] = a
[1,2] = b
[1,3] = a,2
[1,4] = 123"456
[1,5] = AAA
BBB
[1,6] = 1000
[2,1] = 100
[2,2] = 200
[2,3] = 3,000
[2,4] = 400
[2,5] = 500
[2,6] = 600
...全文
376 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
aspan 2009-12-11
  • 打赏
  • 举报
回复
sdasda
-过客- 2008-09-05
  • 打赏
  • 举报
回复
符合当前例子,没做其它测试,如果有不符合的,给出实例
string[] lines = Regex.Split(yourStr, @"(?<=,[^,""]*\r?)\n(?!$)");
for (int i = 1; i <= lines.Length; i++)
{
MatchCollection mc = Regex.Matches(lines[i - 1], @"""(?<o>[^,]*?)""(?=,|$)|""(?<o>[^""]*)""|(?<o>[^,""]+)");
for (int j = 1; j <= mc.Count; j++)
{
richTextBox2.Text += "[" + i + "," + j + "] = " + mc[j - 1].Groups["o"].Value + "\n";
}
}

输出
[1,1] = a
[1,2] = b
[1,3] = a,2
[1,4] = 123""456
[1,5] = AAA
BBB
[1,6] = 1000
[2,1] = 100
[2,2] = 200
[2,3] = 3,000
[2,4] = 400
[2,5] = 500
[2,6] = 600
greenery 2008-09-05
  • 打赏
  • 举报
回复
正则不会,只能一个一个逗号分。下面是csv文件分析的程序。

CSV 文件分析与导入数据库
http://blog.csdn.net/greenery/archive/2008/08/28/2843773.aspx
gzdiablo 2008-09-05
  • 打赏
  • 举报
回复

(?:\"(?>[^\"]*(?:\"{2})?|\"(?<D>)|\"(?<-D>))*(?(D)(?!))\")|[^,\\n]*


随便写了一个 自己试了下没问题。 好久没来CSDN了
worilo 2008-09-05
  • 打赏
  • 举报
回复
这个用正则真的很难做啊。。。
yagebu1983 2008-09-05
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 LQknife 的回复:]
分行就是
string[] split = {Enviroment.NewLine};
然后xxx.Split(split, 这个枚举忘了有只能提示 可以不空的数组移除)
[/Quote]
西安风影 2008-09-05
  • 打赏
  • 举报
回复
mark
LQknife 2008-09-05
  • 打赏
  • 举报
回复
分行就是
string[] split = {Enviroment.NewLine};
然后xxx.Split(split, 这个枚举忘了有只能提示 可以不空的数组移除)
kbryant 2008-09-05
  • 打赏
  • 举报
回复
帮顶~~
chlei 2008-09-05
  • 打赏
  • 举报
回复
怎么分行
RexZheng 2008-09-05
  • 打赏
  • 举报
回复
先分行,然后用以下正则分隔每一项

"?,(?=[^"]*(?:(?:"[^"]*){2})*$)"?

110,566

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧