在 Notepad++ 中,如何替换多行中两个分隔符之间的文本

在 Notepad++ 中,如何替换多行中两个分隔符之间的文本

将 Google 联系人导出为他们所称的“Google CSV 格式(用于导入 Google 帐户)”时,会创建一个逗号分隔的文件。问题是,此格式通过将文本插入引号中并允许对这些引号使用 CRLF 来处理多行注释。

换句话说,假设一条包含姓名、注释、电子邮件的记录,当它有多行注释时,在 .csv 文件中显示如下:

名称,"注释第一行\r\n

第二注行\r\n

最后注释线",[电子邮件保护]\r\n

没有注释字段的相同记录显示如下,并且位于一行中(更标准):

姓名,,[电子邮件保护]\r\n

我正在尝试形成正确的正则表达式,并试图从中找出它 如何在 Notepad++ 中使用正则表达式(教程) 无济于事。

我得到的最接近的答案(不是非常接近)是
,\".*,\"

与 . 匹配的换行符。

我尝试匹配的表达式是:

“仅当有一个或多个 /r/n " “时才选择 ,” 和 ” 之间的文本,并将其替换为 NUL”

因此,在上述例子中,两个记录将是相同的,并且我可以让每个联系人记录出现在一行上,并能够将其导入到 Excel 中。

此刻,我的眼睛在流血,如果能得到任何帮助我都会感激不尽。

答案1

下面对我有用记事本++正如您所解释的那样,您需要的以及您在问题中提供的示例数据。

灯 。 。 。

在此处输入图片描述

相机 。 。 。

  1. 找什么:((?:^|\r\n)[^"]*+"[^\r\n"]*+)\r\n([^"]*+")
  2. 用。。。来代替:$1 $2
  3. 确保正则表达式选项被选中
  4. 确保环绕选项被选中
  5. Replace All任意次数即可获得最终和预期的结果以供记录

在此处输入图片描述

行动 。 。 。

在此处输入图片描述


解释:

(
  (?:^|\r\n)     Begin at start of file or before the CRLF before the start of a record
  [^"]*+         Consume all chars up to the opening "
  "              Consume the opening "
  [^\r\n"]*+     Consume all chars up to either the first CRLF or the closing "
)                Save as capturing group 1 (= everything in record before the target CRLF)
\r\n             Consume the target CRLF without capturing it
(
  [^"]*+         Consume all chars up to the closing "
  "              Consume the closing "
)                Save as capturing group 2 (= the rest of the string after the target CRLF)

注意:*+ 是所有格量词。适当使用它们可以加快执行速度。

更新:

这个更通用的正则表达式版本可以与任何换行符序列(\r\n\r\n)一起使用:

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

来源

相关内容