正则表达式匹配不完整的表达式

时间:2011-12-09 16:33:52

标签: java regex string-matching

我想写正则表达式以识别系列电视剧集;我在Java中这样做。标题是这样写的:

Title 2x05

其中2是季节,5是剧集;所以我使用了这个表达式:

\d*x\d*

除非标题包含一个或多个“x”字符,否则它的效果非常好;在这种情况下,我在这个角色上完全匹配,导致明显的问题。有什么方法可以避免这种情况吗?

6 个答案:

答案 0 :(得分:1)

另一种解决方案,特别是如果你实际上想要匹配x周围的零个或多个数字:使用word boundaries

\b\d*x\d*\b

将匹配2x5x325x甚至x,但它与x中的text不匹配。

答案 1 :(得分:0)

您是否尝试在季节和剧集之间匹配任意数量的x?如果是,请尝试

\d+x+\d+

使用+代替*,以确保季节和剧集至少有一位数字,并且至少有一位x

答案 2 :(得分:0)

这个怎么样?

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

假设每季不超过99个季节,超过999集。

答案 3 :(得分:0)

请尝试使用此表达式“\d+x\d+”。

请注意,+字符将匹配前一个标记的一个或多个(一个数字),而*将匹配零个或多个前面的标记。

答案 4 :(得分: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集

答案 5 :(得分:0)

试试这个:

\d+x\d+

+:1个或更多

*:0或更多

?:1或根本不是

但请记住,这不是在您的情况下测试最强大的方法。如果有人进入99x9999999,那将是第99季和9999999集。如果您想限制可能的季节和剧集数量,check here