首页 > 解决方案 > 正则表达式替换 ;" 和 "; 之间的所有换行符

问题描述

像这样的csv:

A;B;C
1;"a";foo
2;"a
b";{456}
3;"c
d
e";{789}
4;"d

e
f

g";bar

我需要替换 ;" 和 "; 之间的所有换行符 (CRLF) 用一些标记,说<BR>。结果应该是:

A;B;C
1;"a";foo
2;"a<BR>b";{456}
3;"c<BR>d<BR>e";{789}
4;"d<BR><BR>e<BR>f<BR><BR>g";bar

所有其他换行符都应保持不变。我正在尝试使用 Notepad++ 中的正则表达式替换来做到这一点。到目前为止,我发现我可以替换

(;")(([^"])(\r\n)([^"])+)(";)

\1\3<BR>\5\6

这在第 2 行中工作正常,它在第 3 行和第 4 行中删除了太多内容。如果必须,我可以为它编写一个 Python 脚本,但我希望它在 Notepad++ 中更快。有什么建议么?

标签: regexnotepad++

解决方案


您可以使用

查找内容(?:\G(?!^(?<![\s\S]))|;")(?:(?!;"|";).)*\K\R
替换为<BR>

细节

  • (?:\G(?!^(?<![\s\S]))|;")- 成功匹配后的位置(\G(?!^(?<![\s\S])),这里\G匹配字符串的开头或前一个匹配的结尾,并且(?!^(?<![\s\S]))需要减去文档位置匹配的开头)或 ( |);"子字符串
  • (?:(?!;"|";).)*- 除换行符之外的任何字符,0+ 次出现,尽可能多,不开始一个;"";字符序列
  • \K-匹配重置运算符,丢弃到目前为止匹配的文本
  • \R- 换行模式。

在此处输入图像描述


推荐阅读