C# 在带引号的字符串中用分号和引号匹配CSV行
我正在尝试解析一个csv文件的单个文件。 目前,它是通过一些在线正则表达式网页实现的,但最终必须用c#实现。(作为对评论中某些问题的反应) 我在这里读了很多其他文章,所以我自己想弄明白, 但我一直在解决这个问题 我的RegExp测试行如下所示(更新:引号在引号字符串中转义): ;;“test123;weiterer文本”;;“测试麻省理工学院”Zeichen im Spaltenwert;nächste Spalte麻省理工学院“Begrenzungszeichen;"4711";irgend为123,4;1222;“foo”测试C# 在带引号的字符串中用分号和引号匹配CSV行,c#,regex,csv,double-quotes,C#,Regex,Csv,Double Quotes,我正在尝试解析一个csv文件的单个文件。 目前,它是通过一些在线正则表达式网页实现的,但最终必须用c#实现。(作为对评论中某些问题的反应) 我在这里读了很多其他文章,所以我自己想弄明白, 但我一直在解决这个问题 我的RegExp测试行如下所示(更新:引号在引号字符串中转义): ;;“test123;weiterer文本”;;“测试麻省理工学院”Zeichen im Spaltenwert;nächste Spalte麻省理工学院“Begrenzungszeichen;"4711";irgend
- ;是分隔符
- “是引用列的符号
- 该行可能包含空列(分号后跟分号) (无任何文本)
- 带引号的字符串可能包含引号,如下所示 测试麻省理工学院“Zeichen im Spaltenwert”
- 列分隔符也可能出现在带引号的字符串中,例如:“test123;韦特尔文本”
(?假设正确的csv使用双引号进行转义(
“”
),您可以使用它逐行读取
"(?:[^"]+|"")*"|[^;]+|(?<=;|^)(?=;|$)
“(?:[^”]+|”“)*“[^;]+|”(?你说的“你的正则表达式是什么味道的”是什么意思?我不明白。使用csv解析器可能是未来的一种选择,但不是现在,因为我必须解决这个问题的现有实现。目前,使用上述url下的工具MyRegextest.com,但最后使用C#如果引用的部分也可以包含未替换的引用,则无法解决您的问题。@CasimiretHippoly好的,这是一个很好的提示。到目前为止,这是我对testdata.Thx的错误。但是如果引号字符串中的引号被转义,怎么解决呢?它是一个有效的CSV字符串输入吗?如果是,不要使用正则表达式,使用内置的CSV解析器。你可能知道这样的列如何被匹配?目前它不是“foo”te;st(同一列中的引号和分号)
[0] =>
[1] =>
[2] => "test123
[3] => weiterer Text"
[4] =>
[5] => "Test mit " Zeichen im Spaltenwert"
[6] => nächste Spalte mit " Begrenzungszeichen
[7] => "4711"
[8] => irgendwas 123,4
[9] => 1222
[10] => "foo"test"
"test123;weiterer Text"
(?<=^|;)(\"[^"]*\";|\".\"|[^;]*)|[^;]+
[0] => Array
(
[0] =>
[1] =>
[2] => "test123;weiterer Text";
[3] =>
[4] => "Test mit " Zeichen im Spaltenwert"
[5] => nächste Spalte mit " Begrenzungszeichen
[6] => "4711";
[7] => irgendwas 123,4
[8] => 1222
[9] => "foo"test"
)
"(?:[^"]+|"")*"|[^;]+|(?<=;|^)(?=;|$)