2

mythtvで録画された番組を取得し、ハンドブレーキを使用してh264でエンコードするスクリプトがあります。スクリプトはPerlで書かれています。

私の質問は、スペースと特殊文字をperlを使用してアンダースコアに置き換えるにはどうすればよいですか?

出力時の文字列は次のようになります"Parks and Recreation - S05E01 - Ms. Knope Goes to Washington"

こんな感じにしたい

Parks_and_Recreation_S05E01_Ms__Knope_Goes_to_Washington

前もって感謝します。私はグーグルをしましたが、実装できる便利なものを見つけました。

4

3 に答える 3

7

このような何かがそれを行うかもしれません-このような文字列を変換する場合、重複を導入する可能性があることに注意してください。

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;

これは以下を出力します:

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;

このバリアントは以下を出力します:

La_femme_d_a_cote

于 2012-09-23T16:18:41.583 に答える
2
my $input = "Parks and Recreation - S05E01 - Ms. Knope Goes to Washington";
$input =~ s/\W/_/g; # Replace anything other than letters, numbers and underscore

これは以下を出力します:

Parks_and_Recreation___S05E01___Ms__Knope_Goes_to_Washington
于 2012-09-23T16:34:08.597 に答える
-1

以下を使用できます。

perl -pe 's/[^A-Za-z0-9]/_/g'

テスト済み:

> echo "Parks and Recreation - S05E01 - Ms. Knope Goes to Washington"|perl -pe 's/[^A-Za-z0-9]/_/g'
Parks_and_Recreation___S05E01___Ms__Knope_Goes_to_Washington
于 2012-09-24T10:14:26.590 に答える