2011-12-09 93 views
0

我想編寫正則表達式來識別系列電視劇;我正在用Java來做這件事。標題是這樣寫的:正則表達式匹配不完整的表達式

Title 2x05 

其中2是季節,5是情節;所以我用這個表達式:

\d*x\d* 

它的工作原理非常好,除非標題包含一個或多個「x」字符;在這種情況下,我在這個角色上完全匹配,導致明顯的問題。有什麼辦法可以避免這種情況?

回答

0

您是否想在季節和劇集之間匹配任意數量的x?如果是,嘗試

\d+x+\d+ 

使用+代替*以確保至少有一個數字季節和情節,並在租賃之間的一個x

+0

我將永遠有一個 「X」 – user1012480

+1

在這種情況下'\ d + X \ d +'是你需要的。使用'+'而不是'*'將停止與'Title'的匹配,除非''Tile'內有'2x05'這樣的事物。 – Raihan

+0

謝謝,這個工程。 – user1012480

0

這個怎麼樣?

[0-9]{1,2}x[0-9]{1,3} 

假設有不超過99個賽季,每賽季超過999個集。

0

試試用這個表達式代替「\d+x\d+」。

注意,+字符將匹配前述令牌(一個數字)的一個或多個*將匹配前述令牌零個或多個

0

你甚至可以使用組同時檢索季節和情節信息:

Pattern pattern = Pattern.compile(".*(\\d+)x(\\d+).*"); 
Matcher matcher = pattern.matcher("Series 2x08"); 
if (matcher.matches()) { 
    int season = Integer.parseInt(matcher.group(1)); 
    int episode = Integer.parseInt(matcher.group(2)); 
    System.out.printf("Season %d, Episode %d", season, episode); 
} 

結果:第2季第8集

0

試試這個:

\d+x\d+

+: 1或更多

*:0以上

?:1或者根本沒有

但請記住,這不是你的情況,以測試最可靠的方法。如果有人輸入99x9999999,那將是第99季和9999999情節。如果你想限制可能的季節和劇集的數量,check here

1

另一種解決方案,特別是如果你真的想要匹配零或更多數字x:使用word boundaries

\b\d*x\d*\b 

將匹配2x5,,25x甚至x,但它不會匹配xtext