2011-12-09 16 views
0

シリーズテレビ番組を認識するための正規表現を書いています。私はJavaでこれをやっています。タイトルは次のように書かれています。正規表現は不完全な表現に一致します

Title 2x05 

ここで、2はシーズン、5はエピソードです。私は、この式を使用:

\d*x\d* 

をそして、それはタイトルが1つ以上の「X」の文字が含まれている場合を除いて、完全に正常に動作します。この場合、私はこの文字に正確に一致しており、明白な問題を引き起こします。これを避ける方法はありますか?

答えて

0

xの数を季節とエピソードの間に一致させようとしていますか?そうならば、季節やエピソードのためにとの間でリース1 x少なくとも一桁があることを確認する代わりに*

\d+x+\d+ 

使用+を試してみてください。

+0

私は常に1 "×" その場合 – user1012480

+1

'\ dを持つことになります+ X \ d + 'が必要です。 '*'の代わりに '+'を使うと、 'Tile'の中に' 2x05'のようなものがない限り、 'Title'とのマッチングが止まります。 – Raihan

+0

ありがとう、これは動作します。 – user1012480

0

これはいかがですか?以上99の季節や季節ごとに999の以上のエピソードが存在しないと仮定すると、

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

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); 
} 

結果:

\d+x\d+

+:シーズン2、エピソード8

0

はこれを試してみてください。 1以上

*:0以上の

?:1または全く

しかし、これはあなたのケースでテストするための最も強力な方法ではないことを覚えておいてください。誰かが99x9999999を入力した場合、それは99番目のシーズンと9999999のエピソードになります。可能なシーズンとエピソードの数を制限する場合は、check here。使用word boundaries:あなたが実際にx周りにゼロ以上の数字を一致させたいん場合は特に

1

別の解決策、。

\b\d*x\d*\b 

一致します2x5、、25xあるいはx、それが一致しませんxtext中など

関連する問題