我试图解析一个csv文件。 当然,它是通过一些在线正则表达式网页完成的,但最终必须在c#中实现。 (作为评论中某些问题的反应)
我在这里阅读了很多其他关于我自己想出来的文章, 但我坚持解决它。
我的RegExp的测试行看起来像这样(更新:在引用字符串内转义的引号):
;;“test123; weiterer Text”;;“Test mit”Zeichen im Spaltenwert“;nächsteSpaltemit”Begrenzungszeichen;“4711”; irgendwas 123,4; 1222;“foo”test“
;;"test123;weiterer Text";;"Test mit "" Zeichen im Spaltenwert";nächste Spalte mit "" Begrenzungszeichen;"4711";irgendwas 123,4;1222;"foo""test"
问题:
到目前为止我用几次谷歌搜索完成了我对正则表达式的有限理解就是这个表达式
(小于= ^ |;?)(\ “\” | [^] *)| [^] +
这给出了以下结果
[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"
经过测试 https://www.myregextester.com/
我现在遇到的问题是元素2和3.本文
"test123;weiterer Text"
必须是一列,但在引号字符串内的分号内被分割,尽管我认为我告诉表达式匹配引号内的每一行。
我们非常感谢您的帮助。 提前谢谢。
答案 0 :(得分:0)
(?<=^|;)(\"[^"]*\";|\".\"|[^;]*)|[^;]+
为合并2和3 \"[^"]*\";
[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"
)
答案 1 :(得分:0)
假设使用双引号进行转义(""
)的正确csv,可以逐行读取
"(?:[^"]+|"")*"|[^;]+|(?<=;|^)(?=;|$)
基本上有三种匹配列的方法:
"(?:[^"]+|"")*"
在[^;]+
一系列非半音阶(?<=;|^)(?=;|$)
semikolons之间或semikolon与start / end之间的空字段注意:
\n
请参阅https://regex101.com/r/twKZVN/1
(虽然正则表达式101测试PCRE模式,但所有使用的功能也都以.net模式提供。