【发布时间】:2012-10-11 20:01:15
【问题描述】:
我想在只有 2 个单词的行上应用正则表达式。我的文件看起来像这样,括号中的单词之间有可变数量的空格:
Politician_name:(何塞·玛丽亚·阿兹纳尔 | 何塞·玛丽亚·阿兹纳尔 | 何塞·玛丽亚·阿兹纳尔 | 何塞·玛丽亚·阿兹纳尔 ); 政客姓名:(托尼·布莱尔 | 托尼·布莱尔 | 托尼·布莱尔 | 托尼·布莱尔);
我想有一个输出:
Politician_name:(托尼·布莱尔 | 托尼·布莱尔 | 托尼·布莱尔 | 托尼·布莱尔 | 布莱尔·托尼 | 布莱尔·托尼);
我的代码在每一行都应用了正则表达式,我得到如下错误输出:
Politician_name:(Jose Maria Aznar | jose maria aznar | José María Aznar | josé maría aznar | maria jose | Maria Jose );
这是我的代码:
use strict;
use warnings;
use Data::Dumper;
use utf8;
open(IN, $ARGV[0]) or die "Can't read file $ARGV[0]\n";
while (my $line=<IN>)
{
my ($pol,$value) = split(/:/, $line);
warn Dumper \$pol;
chomp($value);
$value=~ s/[ ]+/ /g;
$value=~ s/\);//g;
my $n;
$n = $1 if ($value =~ /\((.+?)\|/);
$n=~ m/(\w*)\s(\w*)/g;
my $swapname="$2 $1";
warn Dumper \$swapname;
print "$pol: $value | $swapname );\n";
}
close(IN);
我需要怎么做才能停止处理三字名称?
【问题讨论】:
-
看起来您可能需要过滤掉列表中的duplicate 名称。您还需要一个内部循环来遍历列表中给定政治家的所有名称。一个条目可以同时包含同一个政客的双字和三字名称吗?
标签: perl