Регулярное выражение соответствует неполному выражению - PullRequest
0 голосов
/ 09 декабря 2011

Я хотел бы написать регулярное выражение для распознавания сериала; Я делаю это на Java. Названия пишутся так:

Title 2x05

Где 2 - сезон, а 5 - эпизод; поэтому я использовал это выражение:

\d*x\d*

И это прекрасно работает, за исключением случаев, когда заголовок содержит один или несколько символов «x»; в этом случае у меня совпадение именно с этим персонажем, что вызывает очевидные проблемы Есть ли способ избежать этого?

Ответы [ 6 ]

1 голос
/ 09 декабря 2011

Другое решение, особенно если вы на самом деле делаете хотите совпасть с нулем или более цифрами вокруг x: используйте границы слов .

\b\d*x\d*\b

будет соответствовать 2x5, x3, 25x или даже x, но оно не будет соответствовать x в text и т. Д.

0 голосов
/ 09 декабря 2011

Попробуйте это:

\d+x\d+

+: 1 или более

*: 0 или более

?: 1 или нет

Но помните, что это не самый надежный метод для проверки в вашем случае. Если кто-то входит в 99x9999999, это будет 99-й сезон и 9999999 эпизодов. Если вы хотите ограничить количество возможных сезонов и эпизодов, отметьте здесь .

0 голосов
/ 09 декабря 2011

Вы даже можете использовать группы для одновременного получения информации о сезоне и эпизоде:

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 голосов
/ 09 декабря 2011

Попробуйте вместо этого выражения "\d+x\d+".

Обратите внимание, что символ + будет соответствовать одному или нескольким предыдущего токена (цифра), тогда как *будет соответствовать нулю или более предыдущего токена.

0 голосов
/ 09 декабря 2011

Как насчет этого?

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

Предполагается, что в сезоне не более 99 сезонов и более 999 эпизодов.

0 голосов
/ 09 декабря 2011

Пытаетесь ли вы сопоставить любое число x между сезоном и эпизодом?Если да, попробуйте

\d+x+\d+

, используйте + вместо *, чтобы убедиться, что есть хотя бы одна цифра для сезона и эпизода, и в аренду одна x между.

...