Учитывая эти данные
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)
Я должен отсеять все до названия песни, что я и сделал успешно.
Затем я должен удалить все после +
, (
, {
, [
и т. д., что я успешно сделал.
Часть, на которой я застрял, заключается в том, что если в строке есть неанглийский символ, как в песне Янна Тирсена, то я должен полностью удалить его.
Я попытался посмотреть в документации, чтобы понять, как использовать \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
Второй строки быть не должно.