单个RegEx表达式,用于解码带有内嵌双引号和逗号的CSV
本文关键字:CSV 表达式 RegEx 用于 解码 单个 | 更新日期: 2023-09-27 18:10:38
我有很多CSV数据,我试图使用正则表达式解码。实际上,我试图在其他人/项目触及的现有代码基础上构建,并且不想因重构类过多而冒险破坏他们的数据流。所以,我想知道是否有可能用单个正则表达式解码这个文本(这就是类目前的工作方式):
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中尝试这个时,我被困在正则表达式上。我有这个:
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那样用单双引号替换转义的双双引号。我想不出比它更好的正则表达式了。这能做到吗?
也许您可以设法使用正则表达式条件与以下构造函数匹配字符串:
-
if-then句子
(?(?=regex)then|else)
-
多个if-then语句
(?(?=condition)(then1|then2|then3)|(else1|else2|else3))
我想出了以下模式,以匹配您的文本主体:([^',]+(?(?=[^',])([^'"]+")|([^',]+,)))
,然而,您需要付出额外的努力,以便为您的文本创建完全匹配的表达式或最终使用文件解析器。如果是这样,您可以看看FileHelpers,这是一个非常简洁的库,用于解析文本文件。
来源:
- 正则表达式条件
- 正则表达式中的替换结构