使用regex转换地址列表的更智能的方法

使用regex转换地址列表的更智能的方法,regex,boost-regex,Regex,Boost Regex,我对regex了解不够,无法想出一种更聪明的方法将地址列表从块转换成单行 下面是一个例子: @sdfqsdf qsdfqdsf USA @sdfqsdf qsdfqdsf USA etc. 我目前使用的是脑死亡正则表达式: SEARCH ^@(.+?)\r\n(.+?)\r\n(.+?)\r\n(.+?)\r\n\r\n REPLACE \1, \2, \3, \4\r\n 这不是很好,因为它假设每个地址都有四行,而且,它很麻烦 我想一个更聪明的解决方案是告诉Perl(Boost)正则表达

我对regex了解不够,无法想出一种更聪明的方法将地址列表从块转换成单行

下面是一个例子:

@sdfqsdf
qsdfqdsf
USA

@sdfqsdf
qsdfqdsf
USA
etc.
我目前使用的是脑死亡正则表达式:

SEARCH ^@(.+?)\r\n(.+?)\r\n(.+?)\r\n(.+?)\r\n\r\n
REPLACE \1, \2, \3, \4\r\n
这不是很好,因为它假设每个地址都有四行,而且,它很麻烦

我想一个更聪明的解决方案是告诉Perl(Boost)正则表达式引擎,一个块以两个CRLF结尾,中间的每一行以一个CRLF结尾,应该将其剥离并替换为一个逗号,但我不知道如何做到这一点

以前有人这样做过吗?能告诉我吗


谢谢。

迭代所有行,并用逗号和空格替换以空行结尾的每一行

以下正则表达式适用于行方式(搜索并替换为
“,”


请记住调整
\r\n
,不要忘记
后面的空格字符,

谢谢。如果仅仅在文本编辑器中提供一个正则表达式是做不到的,那就是我想做的。
(?<=.+)\r\n(?!\r\n)
:%s/.\+\zs\r\n\ze\r\n\@!/,