1

私はまだPERLを学んでいるので、あなたが提供できる助けがあれば大歓迎です. 私が見ている問題に対する簡単な答えがあると確信していますが、それを理解できるかどうかはわかりません。よろしくお願いします。

たくさんのHTMLコードを含むtxtファイルがあります。削除したい 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;

(小さなメモ、正しいスペルは「ハエ」ではなく「ハエ」です)

于 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 に答える