簡體   English   中英

正則表達式匹配不完整的表達式

[英]Regular expression matches an incomplete expression

我想寫正則表達式來識別電視連續劇; 我正在用Java執行此操作。 標題是這樣寫的:

Title 2x05

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

\d*x\d*

它的工作原理非常好,除非標題中包含一個或多個“ x”字符; 在這種情況下,我恰好在此字符上有一個匹配項,從而導致明顯的問題。 有什么辦法可以避免這種情況?

另一種解決方案,特別是如果實際上想匹配周圍的零個或多個數字x :使用單詞邊界

\b\d*x\d*\b

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

您是否要在季節和劇集之間匹配任意數量的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集。 如果您想限制可能的季節和劇集的數量, 請點擊此處

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM