2016-12-15 5 views
1

悪い質問タイトルで申し訳ありませんが、私はより良いものを見つけることができませんでした。正規表現で1つのダッシュだけの文字列を取得する

シーズン、エピソード、テレビ番組のタイトルを抽出する正規表現が必要です。

([\d]+x[\d]+)\s?[-]?\s?([\w\s]*) 

この正規表現マッチRegex101 Example here

を参照してください:

01x02 - The Big Bran Hypothesis 
01x07 - The Dumpling Paradox 
01x07 - The Dumpling Paradox 
06x04 - The Re 

私が直面してる問題私が試した

<span class="topic">01x02 - The Big Bran Hypothesis</span><b 
<td><b>01x07 - The Dumpling Paradox</b></td> 
<title>Transcripts - Forever Dreaming :: 01x07 - The Dumpling Paradox - The Big Bang Theory</title> 
<title>Transcripts - Forever Dreaming :: 06x04 - The Re-Entry Minimisation - The Big Bang Theory</title> 

:私のファイルでは、彼らは次のように表示されますなしで最後のタイトルの残りの部分を取得する方法(「再エントリの最小化」)です。

2番目のキャプチャグループに-を追加してみましたが、これもタイトルの後ろの部分が含まれています。

また、-の肯定先読みを追加しようとしましたが、シーズンとエピソード後の最初の-と一致しているため、これも機能しません。

私はこれを行う方法はかなり単純ですが、私はそれを理解することはできません。誰かアイデア?ありがとうございました!

+0

[(\ d + x \ d +)\ s?([^ <] *) '](https://regex101.com/r/9IpNLa/1)を参照してください。 –

+0

これは、 "The Big Bang Theory"のパートにも一致しています。例えば4番目の一致。 06x04 - Re-Entry Minimization - Big Bang Theory " – Igle

+0

Regexはプレーンテキストに適用する必要があります。はい、あなたは['(\ d + x \ d +)\ s? - ?\ s?([^ - <] *(?:\ b- \ b [^ - <] *)*)'] https://regex101.com/r/9IpNLa/2)、本当に醜いです。 –

答えて

1

末尾のショーの名前回避しながら、この正規表現は成功し、ハイフネーションされたタイトルと一致します: (\d+)x(\d+) ?- ?([-\w\s]+) -

それは、次のキャプチャグループを生成します。

  1. シーズン
  2. エピソード
  3. タイトル

内訳:

  • (\d+)x(\d+)試合とシーズンとエピソードを取り込み、独自のグループ内の各
  • ?- ?付きまたはスペース
  • せずに、ダッシュ区切り文字に一致します([-\w\s]+) -は、任意の文字、ダッシュ、スペースをキャプチャしますが、周囲にスペースを入れたダッシュまでしかキャプチャしません。これは、1つのウィジェットタイトルとその後ろ。

regex101デモを参照してください。

注:あなたは本当に、むしろ特定のグループを使用するよりも、番組名を除外するために全体の一致が必要な場合は、単に肯定先読み(?= -)-を変更ので、それは末尾のダッシュとは一致しません。

0

これは動作するはずです:

(\d{2}x\d{2} - [\w\s]*(-\w)?[\w\s]*) 

をそれはまた、あなたの第2のグループを返しますが、あなたは、単にそれを無視することができます。それとも、実際に、あなたは----- ----- EDIT

が正しいと単に

\d{2}x\d{2} - [\w\s]*(-\w)?[\w\s]* 

との完全な一致を使用することができ、トリックは無視して単語がハイフネーションすることができることを考えることです実際のハイフン。

次の正規表現は、より一般的であり、「アウト・オブ・ボックス」のようなものと一致した:

\d{2}x\d{2} - ([\w\s]*(-\w)?)* 
関連する問題