2014-02-09 52 views
0

非英文字符刪除線鑑於這一數據與使用Perl

TRMMJJH12903CF8B69<SEP>SOKSZAQ12AC9070DC0<SEP>Alexandre Da Costa<SEP>Violin Concerto No.1 in G minor_ Op.26 - III. Allegro energico 

TRMMOWW128F1465642<SEP>SOGELZG12A6D4F865F<SEP>Yann Tiersen<SEP>La Valse D'Amélie (Version Orchestre) 

我歌名之前淘汰所有的事情,我已經成功地完成。

然後我必須刪除+,(,{, [等我已成功完成的所有內容。

我被卡住的部分是,如果該行有非英語字符,如Yann Tiersen歌曲,那麼我必須完全消除它。

我試着在文檔中找出如何使用\w\s但我不明白如何將它放入代碼並使用它。

這裏是我的代碼:

@songs = map { chomp; (split /<SEP>/)[3] } @data; 
for (my $i = 0 ; $i < @songs . length ; $i++) { 

    $title = @songs[$i]; 
    $title =~ s/feat..*//s; 
    $title =~ s/\(.*//s; 
    $title =~ s/\[.*//s; 
    $title =~ s/\{.*//s; 
    $title =~ s/\/.*//s; 
    $title =~ s/\\.*//s; 
    $title =~ s/\+.*//s; 
    $title =~ s/\=.*//s; 
    $title =~ s/\*.*//s; 
    $title =~ s/\".*//s; 
    $title =~ s/\:.*//s; 
    $title =~ s/\-.*//s; 
    $title =~ s/\'.*//s; 
    $title =~ s/\_.*//s; 
    $title =~ s/\?.*//s; 
    $title =~ s/\..*//s; 
    $title =~ s/\!.*//s; 
    $title =~ s/\;.*//s; 
    $title =~ s/\&.*//s; 
    $title =~ s/\$.*//s; 
    $title =~ s/\%.*//s; 
    $title =~ s/\#.*//s; 
    $title =~ s/\|.*//s; 
    $title =~ s/\@.*//s; 
    $title =~ s/\.*//s; 
    $title =~ s/\!.*//s; 
    $title =~ s/\¿.*//s; 
    $title =~ s/\¡.*//s; 
    $title !~ s/[^[:ascii:]]//g; 
    $title = lc($title); 

    print $title, $i, "\n"; 

} 

輸出看起來是這樣的:

violin concerto no 
la valse d 

第二行不應該在那裏。

+1

這是處理事情的令人驚訝的低效的方式!你只是試圖從上面的例子中分離歌曲名稱? – fugu

+0

具體是你想達到什麼? – stevemarvell

+0

什麼是「第二線」? – Kenosis

回答

4
use strict; 
use warnings; 

my @data = ('TRMMJJH12903CF8B69<SEP>SOKSZAQ12AC9070DC0<SEP>Alexandre Da Costa<SEP>Violin Concerto No.1 in G minor_ Op.26 - III. Allegro energico', 'TRMMOWW128F1465642<SEP>SOGELZG12A6D4F865F<SEP>Yann Tiersen<SEP>La Valse D\'Amélie'); 

foreach (@data){ 
    my @split = split(/<SEP>/); 
    print "$split[3]\n" unless /[^[:ascii:]]/; 
} 

打印:

Violin Concerto No.1 in G minor_ Op.26 - III. Allegro energico