需要那种毛茸茸的多行正则表达式
Kind of hairy multiline regex needed
我正在尝试清理包含许多格式错误的电子邮件地址的 csv 文件,例如这个示例:
"Scarpaci"
"Joseph" <scarp@vt.edu>"
"Adams"
"Robert" <robadams@localnet.com>"
其中显示了两个地址,但名字和姓氏在不同的行中。我需要一个正则表达式,它将 1) 识别多行地址,以及 2) 用名字、姓氏和电子邮件地址替换所有一行,但用双引号括起名字和姓氏。
我正在使用 Mac OS,任何具有...
的正则表达式引擎
Perl 很适合这个。将记录分隔符设置为与记录结尾匹配的内容,而不是默认值(换行符):
local $/ = '>"';
然后您可以像往常一样在 "line by line" 中阅读它并以这种方式清理它。像这样的东西应该有助于循环,使用 Perl 的 s 修饰符所以换行符是好的,x 用于注释以记录它:
/\"([^\"]+)\".+? # first name
\"([^\"]+)\"\s+ # second name
<(.+)>\"* # email
/xs or next;
您的输出类似于 " "
,包含捕获的组。
这在 MacOS 上运行良好。
#!/usr/bin/perl -l
local $/ = '>"';
while (<>) {
/\"([^\"]+)\".+? # first name
\"([^\"]+)\"\s+ # second name
<(.+)>\"* # email
/xs or next;
print qq[" " ];
}
非毛输出:
$ perl that-script.pl < that-data.txt
"Scarpaci Joseph" scarp@vt.edu
"Adams Robert" robadams@localnet.com
$
我正在尝试清理包含许多格式错误的电子邮件地址的 csv 文件,例如这个示例:
"Scarpaci"
"Joseph" <scarp@vt.edu>"
"Adams"
"Robert" <robadams@localnet.com>"
其中显示了两个地址,但名字和姓氏在不同的行中。我需要一个正则表达式,它将 1) 识别多行地址,以及 2) 用名字、姓氏和电子邮件地址替换所有一行,但用双引号括起名字和姓氏。
我正在使用 Mac OS,任何具有...
的正则表达式引擎Perl 很适合这个。将记录分隔符设置为与记录结尾匹配的内容,而不是默认值(换行符):
local $/ = '>"';
然后您可以像往常一样在 "line by line" 中阅读它并以这种方式清理它。像这样的东西应该有助于循环,使用 Perl 的 s 修饰符所以换行符是好的,x 用于注释以记录它:
/\"([^\"]+)\".+? # first name
\"([^\"]+)\"\s+ # second name
<(.+)>\"* # email
/xs or next;
您的输出类似于 " "
,包含捕获的组。
这在 MacOS 上运行良好。
#!/usr/bin/perl -l
local $/ = '>"';
while (<>) {
/\"([^\"]+)\".+? # first name
\"([^\"]+)\"\s+ # second name
<(.+)>\"* # email
/xs or next;
print qq[" " ];
}
非毛输出:
$ perl that-script.pl < that-data.txt
"Scarpaci Joseph" scarp@vt.edu
"Adams Robert" robadams@localnet.com
$