1

我仍在学习 PERL,因此您可以提供的任何帮助将不胜感激。我确信我正在查看的问题有一个简单的答案,但我不确定我是否能弄清楚。在此先感谢您的帮助!

我有一个 txt 文件,里面有一堆 HTML 代码。我要删除许多 HTML 表格。但是,有一对我想保留。这些表,守门员,里面有特定的词。

假设 $txt 代表文本文档

$txt = "<TABLE> The brown dog runs </TABLE> 
        Here is another animal 
        <TABLE> The black cat walks </TABLE> 
        Here is another animal
        <TABLE> The Orange snake slithers </TABLE> 
        Here is another animal   
        <TABLE> Green lizard crawls </TABLE> 
        Here is another animal 
        <TABLE> The brown bird flys </TABLE> 
        Here is another animal          
        <TABLE> The green duck flys </TABLE> 
        Here is another animal";

我想保留任何有棕色动物飞行动物的桌子。我不想保留任何其他表。(我想保留第 1、第 5 和第 6 张桌子并摆脱其余的桌子)。因此,如果表中包含 brown 一词或 flys 一词,请保留该表,如果没有则删除该表。

在其他情况下,我使用以下正则表达式来删除表格,但这将删除所有表格。

$txt =~ s{(<Table>.*?)(</Table>)}{table_was_here}ismog;

我如何修改此代码以保留包含某些文本字符串的表?

再次感谢!

4

2 回答 2

0

将其更改为:

$txt =~ s{(<Table>.*?(brown|flys).*?(</Table>)}{table_was_here}ismog;

(小记,正确的拼写是“flies”,不是“flys”)

于 2012-07-20T06:18:06.167 回答
0

以下两种方法都可以:

$txt =~ s{<TABLE>.*?</TABLE>}{$_ = $&; /brown|flys/ ? $_ : ''}isge;

for ( $txt =~ m{<TABLE>.*?</TABLE>}isg ) {
    $txt =~ s/$_// if !/brown|flys/;
}

两者的输出:

<TABLE> The brown dog runs </TABLE> 
Here is another animal 

Here is another animal

Here is another animal   

Here is another animal 
<TABLE> The brown bird flys </TABLE> 
Here is another animal          
<TABLE> The green duck flys </TABLE> 
Here is another animal

希望这可以帮助!

于 2012-07-20T17:38:40.147 回答