Perlはこのために良いです。 (改行です)デフォルトの代わりに、レコードの終わりに一致するものにレコードセパレータを設定します。
local $/ = '>"';
は、その後、あなただけの、通常通り「行ごと」でそれを読んで、それをクリーンアップすることができますそうですね。
/\"([^\"]+)\".+? # first name
\"([^\"]+)\"\s+ # second name
<(.+)>\"* # email
/xs or next;
あなたの出力をキャプチャグループと"$1 $2" $3
のようなもの、次のようになります。このような何かは改行がOKであり、それを文書化するコメントのxので、Perlのs修飾子を使用して、ループに役立つはずです。
これは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]
$
そして、あなたの試みは何、これまでのように見えますか? (これは無料の「コードオンデマンド」サービスではありません) –
2ステップで実行します。 '?(?<=>)"(?= \ r?\ n ")'は何も置き換えないで、 '(?)" \ r?\ n "をスペースで置き換えてください。 – sln
申し訳ありませんが、私はどこで複数の行に正規表現を使用して開始するか分からなかった...しかし、以下の答えは、少しperlを使用して、エレガントなソリューションを提供した。 – rixter