2011-09-10 14 views
0

私の問題への参加:のperlから要素を削除し、アレイの結果に

@array = (possible text, 
      text surrounded with round brackets, 
      text without brackets, 
      text surrounded with round brackets, 
      possible text); 

$line = join(' ', @array); 

第1ブラケットの前に任意のテキストと結合結果(可能なテキスト)の最後の括弧の後に任意のテキストがある場合、私は、削除したいです。おかげさまで

実際のコード:

my (@lines, $line, $anchor, $left, $right, $parent, $elem); 
($anchor) = $tree->look_down(_tag=>"span", class=>"txt"); 
if ($anchor) { 
    $elem = $anchor; 
    my ($product, @tmp); 
    while (($elem = $elem->right()) && 
      ((ref $elem) && ($elem->tag() ne "table"))) { 
     @tmp = get_all_text($elem); 
     push @lines, @tmp; 
     $line = join(' ', @tmp); 
+3

実際のコードを投稿してください。 –

+3

同様に重要:例入力データと望ましい出力。 – FMc

答えて

0

これはあなたのために働くかどうかを確認してください:

$line =~ s/.*?(\(.*\)).*/$1/; 
0

あなたのコードでは、構文エラーがあります。

これを修正してから、$ lineをさらに処理する方法を理解する必要があります。

あなたは@arrayへの割り当てをqwにしていたのを忘れたのでしょうか?

もしそうなら、次のコードは最初の "囲まれたテキスト"の前にテキストを切り捨て、 の最後の "囲まれたテキスト"の後のテキストを切り捨てます。

#!/usr/bin/perl 
#use warnings; 
#use strict; 

@array = qw(possible text, 
      text surrounded with round brackets, 
      text without brackets, 
      text surrounded with round brackets, 
      possible text); 

$line = join(' ', @array); 

$line =~ s/.*?(text surrounded with round brackets)/$1/; 
$line =~ s/(.*text surrounded with round brackets).*/$1/; 
print "$line\n"; 
0

試してみてください。

$line =~ s/\A[^(]+//; 
$line =~ s/[^)]+\z//; 
0

あなたは可能性があり、配列をループ、対応するスライスを抽出し、その後、あなたが最初のブラケットと最後のブラケットを参照してくださいどこのインデックスを構築します。

my @array = ('possible text', 
    '(text surrounded with round brackets)', 
    'text without brackets', 
    '(text surrounded with round brackets)', 
    'possible text'); 

my ($first, $last); 
for (my $i = 0; $i < $#array; ++$i) { 
    next unless $array[$i] =~ m/^\s*\(/; # maybe adapt this regex 
    $first = $i; 
    last; 
} 
for (my $j = $#array; $j > 0; --$j) { 
    next unless $array[$i] =~ m/^\s*\(/; # tweak this too then 
    $last = $j; 
    last; 
} 

my $line = join (' ', @array[$first..$last]); 

これは、私は怖い、mapまたはgrepほどエレガントではありません。

編集

はもともと両方 $first$lastが、2つの別々のループを見つけるために、単一のループを持っていたことは、より効率的です。これはデータの構造にも依存します。多くない場合は、この最適化はあまり重要ではないことは明らかです。一方、実際に多くのデータがある場合は、これをさらに最適化することができます。

関連する問題