我想编写正则表达式来识别系列电视剧;我正在用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