0

鉴于此数据

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

第二行不应该在那里。

4

1 回答 1

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
于 2014-02-09T22:44:07.950 回答