为了账号安全,请及时绑定邮箱和手机立即绑定

修复用于替换引号内所有 \n 和 \r 的正则表达式

修复用于替换引号内所有 \n 和 \r 的正则表达式

德玛西亚99 2022-12-22 12:17:14
这可能很难解释,我会尽力而为。我目前正在 nodejs 中使用 csv 转换流解析器,但我正在努力替换所有 \n's 和 \r's 内引号 (") 来包装一个值。目前我有以下正则表达式:(^|[;])"(?:""|[^"])*[\n\r]+(?:""|[^"])*"在哪里 ; 是列分隔符。这里有两个例子,第一个是按预期进行的,第二个是捕获但不应该捕获的,因为 ; 在引号内。第一次测试(成功)test;"123";"this description with new line feed  below should bematched by regex";test;"1.0" 第二次测试(错误)NewLine1;"test - this one should not be captured by the regex but its being captured ";test;1NewLine2;"test that went wrong"有没有办法选择引号之间的文本,在第一个引号之前包含分号,在最后一个引号之后包含分号,但忽略引号内的分号?我认为这就是我需要的,所以第二个例子没有考虑正则表达式匹配。先感谢您。
查看完整描述

1 回答

?
慕哥6287543

TA贡献1831条经验 获得超10个赞

您可以使用:

(^|;)"(?:""|[^";])*[\n\r]+(?:""|[^";])*"

正则表达式演示

我改为[;]因为;它们在您的情况下是等效的。还添加了;字符,[^";]因为您的 CSV 流列值不能包含此字符。

我不知道你为什么""在正则表达式中有,但如果你寻求考虑列值中的其他双引号,我假设它们必须被转义\,所以你可以使用像(^|;)"(?:(?<=\\)"|[^";])*[\n\r]+(?:(?<=\\)"|[^";])*"has这样的正则表达式,(?<=\\)"而不是""which 表示"前面有反斜杠的字符。( \")



查看完整回答
反对 回复 2022-12-22
  • 1 回答
  • 0 关注
  • 151 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号