将 Google 联系人导出为他们所称的“Google CSV 格式(用于导入 Google 帐户)”时,会创建一个逗号分隔的文件。问题是,此格式通过将文本插入引号中并允许对这些引号使用 CRLF 来处理多行注释。
换句话说,假设一条包含姓名、注释、电子邮件的记录,当它有多行注释时,在 .csv 文件中显示如下:
名称,"注释第一行\r\n
第二注行\r\n
最后注释线",[电子邮件保护]\r\n
没有注释字段的相同记录显示如下,并且位于一行中(更标准):
姓名,,[电子邮件保护]\r\n
我正在尝试形成正确的正则表达式,并试图从中找出它 如何在 Notepad++ 中使用正则表达式(教程) 无济于事。
我得到的最接近的答案(不是非常接近)是
,\".*,\"
与 . 匹配的换行符。
我尝试匹配的表达式是:
“仅当有一个或多个 /r/n " “时才选择 ,” 和 ” 之间的文本,并将其替换为 NUL”
因此,在上述例子中,两个记录将是相同的,并且我可以让每个联系人记录出现在一行上,并能够将其导入到 Excel 中。
此刻,我的眼睛在流血,如果能得到任何帮助我都会感激不尽。
答案1
下面对我有用记事本++正如您所解释的那样,您需要的以及您在问题中提供的示例数据。
灯 。 。 。
相机 。 。 。
- 找什么:
((?:^|\r\n)[^"]*+"[^\r\n"]*+)\r\n([^"]*+")
- 用。。。来代替:
$1 $2
- 确保正则表达式选项被选中
- 确保环绕选项被选中
- 按
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]+([^"]*+")