正規表現を使用して文字列の一部を抽出しようとしています。文字列には次のケースがあります。
case1: Warehouse.13.season01episode01.hdtv.xor.avi
case2: Warehouse.13.s01e01.hdtv.xor.avi
case3: Warehouse.13.01x01.hdtv.xor.avi
上記delimter(.)
の文字列の は に置き換えることができます\s - _
。
使用しているロジックはs or season
、数字で先行(後読み)されているかどうかをチェックし、その前にすべてを抽出しますが、後読みには絶対長が必要なため、文字列を逆にして先読みを使用しました。
ここで、case1 について、正常に動作し、出力する以下の正規表現を作成しましたWarehouse.13
。
.*?\d{1,2}e\d{1,2}s\.(?=\d+)(.*)
今case2のために私が使用した:
.*?\d{1,2}edosipe\d{1,2}nosaes\.(?=\d+)(.*) # works fine.
上記の 2 つのケース + オプションの区切り記号を次のように組み合わせようとすると、次のようになります。
.*?\d{1,2}[e|edosipe]?[._ x\-]?\d{1,2}[s|nosaes]?[._\- ]?(?=\d+)(.*)
上記の場合、ほとんどのものはオプティカル (?) であることがわかります。case3用です。
上記の正規表現を使用しても、case2 には一致しませんが、case1 と case3 では正常に機能します。
ここで何が間違っているのか考えてください。
PS:上記の正規表現に逆らう可能性のある他の文字列がある可能性があることは承知していますが、現在それらには興味がありません。