这可能很难解释,我会尽力而为。我目前正在使用nodejs中的csv转换流解析器,但是我在替换所有\ n和\ r内含引号的“ \”内挣扎。
目前,我有以下正则表达式:
(^|[;])"(?:""|[^"])*[\n\r]+(?:""|[^"])*"
哪里; 是列定界符。
这是两个示例,第一个示例在执行预期的操作,第二个示例在进行捕获,但不应这样做,因为; 在引号内。
第一次测试(成功)
test;"123";"this description with new line feed below should be
matched by regex";test;"1.0"
第二次测试(错误)
NewLine1;"test - this one should not be captured by the regex but its being captured ";test;1
NewLine2;"test that went wrong"
有没有办法选择引号之间的文本,在第一个引号之前包含分号,在最后一个引号之后包含分号,但忽略引号内的分号?我认为这就是我所需要的,因此第二个示例不考虑正则表达式匹配。
先感谢您。
您可以使用:
(^|;)"(?:""|[^";])*[\n\r]+(?:""|[^";])*"
我改为[;]
,;
因为它们在您的情况下是等效的。还添加了;
字符,[^";]
因为您的CSV流列值不能包含此字符。
我不知道您为什么要""
在正则表达式中使用,但是如果您考虑在列值中考虑其他双引号,则我认为它们必须被转义\
,因此您可以使用正则表达式(^|;)"(?:(?<=\\)"|[^";])*[\n\r]+(?:(?<=\\)"|[^";])*"
来(?<=\\)"
代替,""
而用正则表达式来代替"
带反斜杠的字符。(\"
)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句