我想編寫正則表達式來識別系列電視劇;我正在用Java來做這件事。標題是這樣寫的:正則表達式匹配不完整的表達式
Title 2x05
其中2是季節,5是情節;所以我用這個表達式:
\d*x\d*
它的工作原理非常好,除非標題包含一個或多個「x」字符;在這種情況下,我在這個角色上完全匹配,導致明顯的問題。有什麼辦法可以避免這種情況?
我想編寫正則表達式來識別系列電視劇;我正在用Java來做這件事。標題是這樣寫的:正則表達式匹配不完整的表達式
Title 2x05
其中2是季節,5是情節;所以我用這個表達式:
\d*x\d*
它的工作原理非常好,除非標題包含一個或多個「x」字符;在這種情況下,我在這個角色上完全匹配,導致明顯的問題。有什麼辦法可以避免這種情況?
您是否想在季節和劇集之間匹配任意數量的x
?如果是,嘗試
\d+x+\d+
使用+
代替*
以確保至少有一個數字季節和情節,並在租賃之間的一個x
。
這個怎麼樣?
[0-9]{1,2}x[0-9]{1,3}
假設有不超過99個賽季,每賽季超過999個集。
試試用這個表達式代替「\d+x\d+
」。
注意,+
字符將匹配前述令牌(一個數字)的一個或多個而*
將匹配前述令牌零個或多個。
你甚至可以使用組同時檢索季節和情節信息:
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集
試試這個:
\d+x\d+
+
: 1或更多
*
:0以上
?
:1或者根本沒有
但請記住,這不是你的情況,以測試最可靠的方法。如果有人輸入99x9999999,那將是第99季和9999999情節。如果你想限制可能的季節和劇集的數量,check here。
我將永遠有一個 「X」 – user1012480
在這種情況下'\ d + X \ d +'是你需要的。使用'+'而不是'*'將停止與'Title'的匹配,除非''Tile'內有'2x05'這樣的事物。 – Raihan
謝謝,這個工程。 – user1012480