所以我的 Perl 脚本基本上接受一个字符串,然后尝试通过对其进行多次搜索和替换来清理它,如下所示:
$text =~ s/<[^>]+>/ /g;
$text =~ s/\s+/ /g;
$text =~ s/[\(\{\[]\d+[\(\{\[]/ /g;
$text =~ s/\s+[<>]+\s+/\. /g;
$text =~ s/\s+/ /g;
$text =~ s/\.*\s*[\*|\#]+\s*([A-Z\"])/\. $1/g; # replace . **** Begin or . #### Begin or ) *The
$text =~ s/\.\s*\([^\)]*\) ([A-Z])/\. $1/g; # . (blah blah) S... => . S...
如您所见,我正在处理令人讨厌的 html,并且必须击败它才能提交。
我希望有一种更简单、更美观的方式来做到这一点。我有大约 50 行看起来就像上面的一样。
我已经通过使用哈希解决了这个问题的一个版本,其中键是注释,哈希是 reg 表达式,如下所示:
%rxcheck = (
'time of day'=>'\d+:\d+',
'starts with capital letters then a capital word'=>'^([A-Z]+\s)+[A-Z][a-z]',
'ends with a single capital letter'=>'\b[A-Z]\.'
}
这就是我使用它的方式:
foreach my $key (keys %rxcheck) {
if($snippet =~ /$rxcheck{ $key }/g){ blah blah }
}
当我尝试一个哈希值时,问题就出现了,其中键是表达式,它指向我想要替换它的内容......并且里面有一个 $1 或 $2。
%rxcheck2 = (
'(\w) \"'=>'$1\"'
}
上面就是这样做的:
$snippet =~ s/(\w) \"/$1\"/g;
但我似乎无法将“$1”部分逐字传递到正则表达式中(我认为这是正确的词......即使我使用了 ' 标记,似乎 $1 正在被解释。)所以这导致:
if($snippet =~ /$key/$rxcheck2{ $key }/g){ }
那是行不通的。
所以2个问题:
简单:如何以易于编辑的方式处理大量正则表达式,以便我可以更改和添加它们,而无需剪切和粘贴之前的行?
更难:我如何使用散列(或数组,如果我想包含多个部分,例如 1)要搜索的部分,2)替换 3)注释,4)全局/不区分大小写的修饰符),如果这实际上是最简单的方法吗?
谢谢你的帮助 -