2017-06-04 1 views
0

正規表現を使用してファイル名から番組のタイトルを取得しますが、ショー名に1年が含まれている必要がある場合は問題があります。ここまで私がこれまで持っていたことがあります。年を含むショー名を抽出するための正規表現

(?i)(.*?(?:19\d{2}|20\d{2})(?=[ -]+([\d]|[S][\d]|Season)))  

これは、Flash 2014には一致しますが、トップシェフには一致しないという問題があります。最後に疑問符を追加して(?:19 \ d {2} | 20 \ d {2})をオプションにすると、それはトップシェフと一致しますが、Flash 2014では一致しません。

例ファイル:

Top Chef S14E14 Comida Final.mkv 
The Flash 2014 03x01 720p HDTV X264-DIMENSION.mkv 

肯定先読みの目の前にあるオプションのグループに関連する私の問題はありますか?クエリが両方のショーに一致するように修正するにはどうすればよいですか?あなたが提供する2線で

+0

あなたは、タイトルではありません何からタイトルを区別するために意味正確にどのように説明できますか? –

+0

空白またはダッシュが1つ以上、2桁のSまたはSeasonという単語がある場合は、その前のすべてがショーのタイトルと見なされます。しかし、数字とのマッチは、1年間含まれています。 – user1234325

答えて

0

は、この正規表現は動作します:

  • 少なくとも2:それは、次のいずれかが続いている文字、スペースまたはアンダースコアのすべてのシーケンスと一致する

    ^([\w\s]+)(?=\s{2,}|\-\d|s\d{2}|season|\d{4}) 
    

    スペース

  • ダッシュと数
  • "s" は2桁の数字が続く
  • "シーズン"
  • 4桁

存在

0

が、私はそれが動作を取得するために、次を使用した場合は、その後、末尾のスペースを削除した結果をトリミングする必要があります。

^       # BEGINNING OF STRING 

(?<TITLE>     # CAPTURE THE TITLE 
    .+?      # ANYTHING UP THROUGH (YEAR OR LOOKAHEAD FOR SEASON) 
    (?:\s+(?:19|20)\d{2})? # OPTIONALLY - A SPACE FOLLOWED BY A YEAR 
)       # END OF TITLE CAPTURE 

(?=\s+(?:\d|S\d|Season)) # LOOKAHEAD FOR THE SEASON 

https://www.reddit.com/r/regex/comments/6fepo3/getting_show_title_from_filename/dihlh8a/

関連する問題