Справка по регулярным выражениям для сериалов на Java - PullRequest
2 голосов
/ 02 ноября 2010

Я скажу, что я очень слаб в своих знаниях регулярных выражений ... Я пытаюсь сопоставить имена файлов сериалов в java , например:

xyz название S01E02 бла бла
имя бла бла бла.S03E04
название сезона название s05e03

Однако мое решение работает, оно только соответствует name s01e02 или name.s03e03 Не полное название сериала

мое текущее регулярное выражение:

(\\w+)((\\.|\\s)[sS]([0-9]{2})[eE]([0-9]{2}))

Ответы [ 3 ]

4 голосов
/ 02 ноября 2010

Вот предложение:

Pattern p = Pattern.compile("(.*?)[.\\s][sS](\\d{2})[eE](\\d{2}).*");

String[] tests = { "xyz title name S01E02 bla bla",
                   "bla bla title name.S03E04",
                   "the season title name s05e03" };

for (String s : tests) {
    Matcher m = p.matcher(s);
    if (m.matches())
        System.out.printf("Name: %-23s Season: %s Episode: %s%n",
                m.group(1), m.group(2), m.group(3));

Отпечатки:

Name: xyz title name          Season: 01 Episode: 02
Name: bla bla title name      Season: 03 Episode: 04
Name: the season title name   Season: 05 Episode: 03
1 голос
/ 02 ноября 2010

Этот шаблон может работать лучше:

(?xi) ^ (?: \b \w+ \s*? ) + [\s.] S \d{2} E \d{2} $

Вам нужно будет добавить дополнительные обратные слеши, если этот шаблон является литеральной строкой Java, а не читается откуда-либо еще.

Также этоработает только с данными ASCII, а не с полным Unicode, потому что регулярные выражения Java отказываются выделять старые ярлыки регулярных выражений.Тогда вам придется использовать свойства Unicode.Это довольно неприятно, но если это так, скажите мне, и я обновлю шаблон для работы с Unicode.

1 голос
/ 02 ноября 2010

Это из-за того, что (\\w+) у вас в начале соответствует одному слову.

Чтобы он соответствовал группе слов, разделенных пробелами, замените ее на:

(\\w+\\s+)+
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...