Справка по Regex для сканирования DVD с HandBrake - PullRequest
0 голосов
/ 13 октября 2011

Я занимаюсь разработкой на Java, и у меня есть длинная строка текста, которая содержит всю необходимую мне информацию о конкретном DVD.(Это результат сканирования от HandBrakeCLI).Мне нужно создать регулярное выражение, которое будет захватывать каждый бит информации, которая мне нужна, но игнорирую некоторые особые случаи.Моя программа состоит из объектов DVD, Title, Chapter и Language.Он структурирован так: на DVD есть заголовок (и) В заголовке есть глава (и) и язык (и). Мне нужно вывести следующую информацию из вывода: Номер заголовка - Название языка и номер звуковой дорожки - Номер главы

Один особый случай, который доставляет мне особую проблему, заключается в том, что некоторые заголовки начинают сканирование, но затем вывод говорит, что они игнорируются, потому что он слишком короткий и начинается со следующего заголовка.Я не знаю, как написать регулярное выражение, которое будет игнорировать любые совпадения, которые содержат это.Мне было очень трудно разобраться в этом!

scan: scanning title (\d+)?.{0,500}(ignoring title)

Это захватит все названия, которые нужно игнорировать, но я думаю, что мне нужен один длинный регулярный оператор, который соберет всю необходимую мне информациюи игнорировать особые случаи.Если бы я мог каким-то образом связать каждое действительное сканирование заголовков в одной группе, это было бы здорово!Большое спасибо за помощь!

Вот пример вывода:

[11:25:53] scan: DVD has 9 title(s)
[11:25:53] scan: scanning title 1
[11:25:53] scan: opening IFO for VTS 1
[11:25:53] scan: duration is 00:00:00 (76 ms)
[11:25:53] scan: ignoring title (too short)
[11:25:53] scan: scanning title 2
[11:25:53] scan: opening IFO for VTS 2
[11:25:53] scan: duration is 01:59:27 (7167153 ms)
[11:25:53] pgc_id: 1, pgn: 1: pgc: 0x1bad980
[11:25:53] scan: vts=2, ttn=1, cells=0->17, blocks=4->3, 1906832 blocks
[11:25:53] scan: checking audio 1
[11:25:53] scan: id=80bd, lang=English (AC3), 3cc=eng ext=0
[11:25:53] scan: checking audio 2
[11:25:53] scan: id=81bd, lang=Deutsch (AC3), 3cc=deu ext=0
[11:25:53] scan: checking audio 3
[11:25:53] scan: id=82bd, lang=English (AC3), 3cc=eng ext=0
[11:25:53] scan: checking audio 4
[11:25:53] scan: id=83bd, lang=Espanol (AC3), 3cc=spa ext=0
[11:25:53] scan: checking audio 5
[11:25:53] scan: id=84bd, lang=Francais (AC3), 3cc=fra ext=0
[11:25:53] scan: checking audio 6
[11:25:53] scan: id=85bd, lang=Italiano (AC3), 3cc=ita ext=0
[11:25:53] scan: checking audio 7
[11:25:53] scan: id=86bd, lang=Portugues (AC3), 3cc=por ext=0
[11:25:53] scan: checking audio 8
[11:25:53] scan: id=87bd, lang=Samoan (AC3), 3cc=smo ext=0
[11:25:53] scan: checking subtitle 1
[11:25:53] scan: id=20bd, lang=English, 3cc=eng
[11:25:53] scan: title 2 has 18 chapters
[11:25:53] scan: chap 1 c=0->0, b=4->51422 (51419), 127306 ms
[11:25:53] scan: chap 2 c=1->1, b=51423->79617 (28195), 100277 ms
[11:25:53] scan: chap 3 c=2->2, b=79618->170050 (90433), 233291 ms
[11:25:53] scan: chap 4 c=3->3, b=170051->192087 (22037), 85367 ms
[11:25:53] scan: chap 5 c=4->4, b=192088->327371 (135284), 568451 ms
[11:25:53] scan: chap 6 c=5->5, b=327372->431726 (104355), 283191 ms
[11:25:53] scan: chap 7 c=6->6, b=431727->441166 (9440), 40203 ms
[11:25:53] scan: chap 8 c=7->7, b=441167->675145 (233979), 977815 ms
[11:25:53] scan: chap 9 c=8->8, b=675146->870812 (195667), 778680 ms
[11:25:53] scan: chap 10 c=9->9, b=870813->959026 (88214), 218223 ms
[11:25:53] scan: chap 11 c=10->10, b=959027->1134726 (175700), 748540 ms
[11:25:53] scan: chap 12 c=11->11, b=1134727->1375583 (240857), 1013772 ms
[11:25:53] scan: chap 13 c=12->12, b=1375584->1452670 (77087), 204138 ms
[11:25:53] scan: chap 14 c=13->13, b=1452671->1461940 (9270), 41303 ms
[11:25:53] scan: chap 15 c=14->14, b=1461941->1698075 (236135), 1069800 ms
[11:25:53] scan: chap 16 c=15->15, b=1698076->1826069 (127994), 367324 ms
[11:25:53] scan: chap 17 c=16->16, b=1826070->1906831 (80762), 309385 ms
[11:25:53] scan: chap 18 c=17->17, b=0->3 (4), 76 ms
[11:25:53] scan: aspect = 0
[11:25:53] scan: scanning title 3

Титул 3 похож на Титул 2, а Титул 5 похож на Титул 1

1 Ответ

0 голосов
/ 17 октября 2011

Хорошо, так что это не совсем правильное решение, но я нашел работу, которая прекрасно работала. Вместо этого я решил создать уникальную строку для каждого отдельного заголовка. Это действительно просто. Как только программа доходит до первой строки, которая соответствует: scan: scanning title (\d+?), я создаю новый титровальный объект и запускаю для него новый построитель строк. Затем я пересмотрел каждую отдельную строку. Если бы он соответствовал ignore, то я бы просто проигнорировал его, обработав таким образом исключение. Оттуда было легко вывести информацию, необходимую мне для каждого заголовка. Программа работает сейчас, и я рад сообщить, что, когда вы складываете все время, которое я потратил на это, и сравниваете его со временем, которое я бы потратил на создание очередей для них по отдельности с помощью графического интерфейса, я сэкономил примерно ... э-э ... 5 часов ... Так что это не было огромной экономией, но это было в миллион раз лучше, чем нажатие в миллион раз. Ха-ха, в любом случае, спасибо всем, кто помогал в этом проекте (включая другие посты о проекте).

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