2016-08-14 3 views
1

なぜこの正規表現パターンは「Season 02 Episode 01」という文字列を正しく解析しないのですか?正規表現の問題の解析シーズン/エピソードパターン

例えば、これは一致しない。

var fileName = "Its Always Sunny in Philadelphia Season 02 Episode 01 - Charlie Gets Crippled.avi" 

// Regex explanation: 
// Starts with "S" and can contain more letters, can continue with space, then contains two numbers. 
// Then starts with "E" again and can contain more letters, can continue with space, then contains two numbers. 
var pattern = @"S\w?\s?(\d\d)\s?E\w?\s?(\d\d)"; 
var regex = new Regex(pattern, RegexOptions.IgnoreCase); 
var match = regex.Match(fileName); 

答えて

1

使用*代わり?

? 0又は1時間です。 *は0回以上です。

+0

あなたは絶対に正しいです、それは私の間違いでした。これは固定パターンです:var pattern = @ "S \ w * \ s *(\ d \ d)\ s * E \ w * \ s *(\ d \ d)"; –

1

"S" で始まり、より多くの文字を含めることができます[...]

あなたは+、ない?を意味します。

var pattern = @"S\w+\s+(\d+)\s+E\w+\s+(\d+)"; 

この正規表現は非常に特殊です。偽陽性に注意してください。表現をより具体的にすることをお勧めします。

+0

+1の '(\ d +)'は私の正規表現の改善です。しかし、他のケースでは、私が0以上のインスタンスを期待しているので、 '+'は動作しません( '*'はM.kazem Akhgaryによって提案されたように)。元の投稿に指定されていなかったもの(残念ですが、私はそれを当然としていました。私は持ってはいけません)は、 'S02E01'も一致しています。 「偽陽性に気をつけろ」については、あなたも正しいですが、入力形式が大きく異なるため、パターンは目的に応じて一般的です。 –

+0

ええ、そうです、あなたは星を使用しなければならない 'S01'を捕まえることができます。それを書くためのかなり一般的な方法は、それについて考えていたはずです。 – Tomalak