我想写正则表达式以识别系列电视剧集;我在Java中这样做。标题是这样写的:
Title 2x05
其中2是季节,5是剧集;所以我使用了这个表达式:
\d*x\d*
除非标题包含一个或多个“x”字符,否则它的效果非常好;在这种情况下,我在这个角色上完全匹配,导致明显的问题。有什么方法可以避免这种情况吗?
答案 0 :(得分:1)
答案 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。