4

こんにちは、文字列の末尾からパーセンテージを削除する正規表現を作成する際に助けていただければ幸いです。

Film name (2009) 58%  ->  Film name (2009)
Film name (2010) 59%  ->  Film name (2010)

文字列には括弧で囲まれた年がある場合とない場合があります。かっこで囲まれた年の前に、映画名は英数字で、複数の単語を含む場合があります。

「一括名前変更ユーティリティ」を使用しているため、「一致」フィールドと「置換」フィールドに入力しようとしています。

私が思いついた最高のものは次のとおりです。

([A-Z][a-z]*) \((\d*)\) (\d*\%) -->  \1 (\2)

ただし、これは単一の単語の映画名でのみ機能するようで、括弧が失われたため、再度追加する必要がありました!

私はグーグルで検索しましたが、可能な表現を試すたびに、pcre(Bulk Rename Utility)に基づいていると思われる「一括名前変更ユーティリティ」では機能しません。

4

5 に答える 5

4

これは非常に簡単に行われます

s/\s*\d+%$//

これにより、後続の数字の文字列とそれに続くパーセント記号が先行するスペース文字と共に削除されます

use strict;
use warnings;

while (<DATA>) {
  s/\s*\d+%$//;
  print;
}

__DATA__
Film name (2009) 58%
Film name (2010) 59%

出力

Film name (2009)
Film name (2010)
于 2012-09-30T12:56:24.950 に答える
2

間違ったものを置き換えないようにするには、これを行います

\b(100|\d{1,2})%\b

そしてそれを何も置き換えません。

単語の境界で停止し (つまり、30% は問題ありませんが、w30% は問題ありません)、100 または 0-99 の数字のみを取得します。

編集:

% が文字列の最後の文字である場合、より良い結果を得ることができます

\b(100|\d{1,2})%$

このように%して、映画のタイトルから % で数字を削除することを避けて、行末の のみを取得します。

文字列がファイル名であり、それを置き換える必要があり、タイルの一部を削除できない場合は、これを行うことができます

(.+?)(100|[0-9]{1,2})%$ #I think using 0-9 is accepted by more languages

と置き換えます

$1

\1\2置換式では使用しないでください。これらは、最初と 2 番目のキャプチャが一致したものと一致する正規表現パターンです。$1$2は、最初と 2 番目のキャプチャが一致したものを含む変数であるため、代わりにそれらを使用する必要があります。

于 2012-09-30T11:26:06.627 に答える
2

私はユーティリティに精通していませんが、代わりに、通常は[0-9]+%何も置き換えないだけでうまくいくはずです。ただし、名前にパーセンテージが含まれている映画がある場合は注意してください。

于 2012-09-30T11:17:41.430 に答える
0

幸運なことに、パーセンテージ (存在する場合) は常に最後に表示されます。単にそれを重要な事実として使用し、他のものと一致させようとしないでください. (RE の一般的なルールとして、変更しないものを一致させることは、何かがうまくいかない可能性を追加するだけであり、何のメリットもありません。懸念している部分の場所を確認する必要がある場合にのみ行ってください。と。)

私の推測では、以前の回答のいくつかは多かれ少なかれ正しいものでしたが、「}」と「)」「|」のすべてにタイプミスがあったため、うまくいきませんでした。および '\' (正規表現は正確でなければなりません。バックスラッシュはスラッシュではありません。角括弧は中括弧ではありません。括弧は括弧ではありません。プラスはスターではありません。小文字は大文字ではありません。白は追加できません。どこでもスペースなど)、文字列の末尾に末尾のスペースがある場合があるため、ほとんどが機能しませんでした. したがって、「一致」フィールドを使用
\s+(100|\d\d?)%\s*$
して、「置換」フィールドを完全に空にします。

(もう 1 つの考え: データの一部に数字とパーセント記号の間にスペースがある可能性はありますか [このように: foo bar (2012) 83 %)? その場合は、「一致」フィールドを変更して、その不測の事態を許可します
\s+(100|\d\d?)\s*%\s*$

于 2012-10-01T04:39:51.340 に答える