如何使用Perl脚本用下划线替换字符串中的特殊字符?

nku*_*eck 2 linux perl

我有一个脚本采用mythtv录制的节目,并使用手刹在h264编码.该脚本是用Perl编写的.

我的问题是如何使用perl替换空格和特殊字符和下划线?

输出时字符串看起来像这样 "Parks and Recreation - S05E01 - Ms. Knope Goes to Washington"

我希望它看起来像这样

Parks_and_Recreation_S05E01_Ms__Knope_Goes_to_Washington

提前致谢.我确实做了一些谷歌搜索,但找到了我可以实现的任何有用的东西.

And*_*ahl 8

像这样的东西可能会这样做 - 请注意,如果你改变这样的字符串,你可能会引入重复.

my $input ="Parks and Recreation - S05E01 - Ms. Knope Goes to Washington";

$input =~ s/ - /_/g; # Replace all " - " with "_"
$input =~ s/[^A-Za-z0-9]/_/g; # Replace all non-alphanumericals with "_"

print $input;
Run Code Online (Sandbox Code Playgroud)

这输出:

Parks_and_Recreation_S05E01_Ms__Knope_Goes_to_Washington

编辑

下面的Érics评论是非常相关的,这是一个稍微好一点的方法,在进行替换之前用非重音替换重音字符:

use utf8;
use Unicode::Normalize;

my $input="La femme d'à côté";
my $result = NFD($input); # Unicode normalization Form D (NFD), canonical decomposition.
$result !~ s/[^[:ascii:]]//g; # Remove all non-ascii.
$result =~ s/ - /_/g; # Replace all " - " with "_"
$result =~ s/[^A-Za-z0-9]/_/g; # Replace all non-alphanumericals with _
print $result;
Run Code Online (Sandbox Code Playgroud)

此变体输出:

La_femme_d_a_cote

  • 如果他喜欢FrançoisTruffaut?"La femme d'àcôté"给出了"La_femme_d___c_t_".不是很漂亮^ _ ^ (2认同)