C# 在带引号的字符串中用分号和引号匹配CSV行

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

我正在尝试解析一个csv文件的单个文件。 目前,它是通过一些在线正则表达式网页实现的,但最终必须用c#实现。(作为对评论中某些问题的反应)

我在这里读了很多其他文章,所以我自己想弄明白, 但我一直在解决这个问题

我的RegExp测试行如下所示(更新:引号在引号字符串中转义):

;;“test123;weiterer文本”;;“测试麻省理工学院”Zeichen im Spaltenwert;nächste Spalte麻省理工学院“Begrenzungszeichen;"4711";irgend为123,4;1222;“foo”测试

  • 是分隔符
  • 是引用列的符号
问题:

  • 该行可能包含空列(分号后跟分号) (无任何文本)
  • 带引号的字符串可能包含引号,如下所示 测试麻省理工学院“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"
    )
"(?:[^"]+|"")*"|[^;]+|(?<=;|^)(?=;|$)