2011-12-09 98 views
0

我想编写正则表达式来识别系列电视剧;我正在用Java来做这件事。标题是这样写的:正则表达式匹配不完整的表达式

Title 2x05 

其中2是季节,5是情节;所以我用这个表达式:

\d*x\d* 

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

回答

0

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

\d+x+\d+ 

使用+代替*以确保至少有一个数字季节和情节,并在租赁之间的一个x

+0

我将永远有一个 “X” – user1012480

+1

在这种情况下'\ d + X \ d +'是你需要的。使用'+'而不是'*'将停止与'Title'的匹配,除非''Tile'内有'2x05'这样的事物。 – Raihan

+0

谢谢,这个工程。 – user1012480

0

这个怎么样?

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

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

0

试试用这个表达式代替“\d+x\d+”。

注意,+字符将匹配前述令牌(一个数字)的一个或多个*将匹配前述令牌零个或多个

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集

0

试试这个:

\d+x\d+

+: 1或更多

*:0以上

?:1或者根本没有

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

1

另一种解决方案,特别是如果你真的想要匹配零或更多数字x:使用word boundaries

\b\d*x\d*\b 

将匹配2x5,,25x甚至x,但它不会匹配xtext