需要一种毛茸茸的多线正则表达式

问题描述 投票:-2回答:1

我试图清理一个包含许多格式错误的电子邮件地址的csv文件,例如:

"Scarpaci"
"Joseph" <[email protected]>"
"Adams"
"Robert" <[email protected]>"

它显示了两个地址,但在单独的行上有名字和姓氏。我需要一个正则表达式,1)识别多行地址,2)用一行的名字,姓氏和电子邮件地址替换它,但用双引号括起来的名字和姓氏。

我使用Mac OS,无论是什么正则表达式引擎...

regex macos multiline
1个回答
1
投票

Perl对此很有好处。将记录分隔符设置为与记录结尾匹配的内容,而不是默认值(即换行符):

local $/ = '>"';

然后你可以像往常一样“逐行”地阅读它并以这种方式清理它。这样的东西应该有助于循环,使用Perl的修饰符,因此换行是正常的,而x用于记录它的注释:

 /\"([^\"]+)\".+? # first name
  \"([^\"]+)\"\s+ # second name
  <(.+)>\"* # email
 /xs or next;

您的输出将类似于"$1 $2" $3,包含捕获的组。

这适用于MacOS。

#!/usr/bin/perl -l

local $/ = '>"';

while (<>) {
    /\"([^\"]+)\".+? # first name
     \"([^\"]+)\"\s+ # second name
     <(.+)>\"* # email
    /xs or next;

    print qq["$1 $2" $3];
}

非毛产量:

$ perl that-script.pl < that-data.txt 
"Scarpaci Joseph" [email protected]
"Adams Robert" [email protected]
$ 
© www.soinside.com 2019 - 2024. All rights reserved.