使用embedded式dobule引号和逗号对单个RegExexpression式进行解码

我有很多CSV数据,我试图解码使用正则expression式。 我实际上试图在现有的代码基础上构build其他人员/项目,并且不想冒着通过重构类太多风险来破坏数据stream的风险。 所以,我想知道是否有可能解码这个文本与一个正则expression式(这是目前如何工作):

f1,f2,f3,f4,f5,f6,f7 ,"clean text","with,embedded,commas.","with""embedded""double""quotes",,"6.1", 

第一行是标题。 如果我将其保存为xxx.csv并在Excel中打开,则将其正确反编译为读取(注意字段之间的空格为单元格分隔符):

 f1 f2 f3 f4 f5 f6 f7 clean text with,embedded,commas. with"embedded"double"quotes 6.1 

但是,当我在.net中试用这个时,我遇到了正则expression式。 我有这个:

 string regExp = "(((?<x>(?=[,\\r\\n]+))|\"(?<x>([^\"]|\"\")+)\"|(?<x>[^,\\r\\n]+)),?)"; 

你可以在这里看到它的行动:

http://ideone.com/hRq8xe

结果如下:

 <start> clean text with,embedded,commas. with""embedded""double""quotes 6.1 <end> 

这是非常接近的,但它并没有用像Excel这样的单双引号replace掉双引号。 我不能想出一个更好的正则expression式。 可以这样做吗?

也许你可以设法使用正则expression式条件来匹配你的string与下面的构造函数:

  • if-then语句 (?(?=regex)then|else)
  • 多个if-then语句 (?(?=condition)(then1|then2|then3)|(else1|else2|else3))

([^\,]+(?(?=[^\,])([^\"]+")|([^\,]+,))) ,但是,您需要付出额外的努力才能为文本创build完全匹配的expression式,或者最终使用文件parsing器。 如果是这样,你可以看看FileHelpers ,一个相当整洁的库parsing文本文件。

资料来源:

  • 正则expression式条件
  • 正则expression式中的交替构造