Регулярное сопоставление строки, когда она существует или нет - PullRequest
0 голосов
/ 20 января 2011

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

Пример текста для видео;

Seems stream 0 codec frame rate differs from container frame rate: 30000.00 (30000/1) -> 15.00 (15/1)
Input #0, avi, from 'making_of_divx5mp3.avi':
  Duration: 00:27:46.60, start: 0.000000, bitrate: 154 kb/s
    Stream #0.0: Video: mpeg4, yuv420p, 320x240 [PAR 1:1 DAR 4:3], 15 fps, 15 tbr, 15 tbn, 30k tbc
    Stream #0.1: Audio: mp3, 24000 Hz, 2 channels, s16, 40 kb/s
At least one output file must be specified

Пример текста для аудио;

Ввод # 0, ogg, из 'C: \ examplemedia \ Americanism_ (Franklin_D._Roosevelt) .ogg': Продолжительность: 00: 04: 21.24, старт: 0.000000, битрейт: 49 кбит / с Поток № 0.0: Аудио: vorbis, 11025 Гц, моно, s16, 49 кбит / с Необходимо указать хотя бы один выходной файл

Мое регулярное выражение

s {2} Длительность [:] \ S (\ d {2}? [:] \ d {2} [:] \ d {2}) [.] \ д {2} [,] \ S {1} начать [:] \ s {1} \ д {1} \ д {6} [,] \ с {1} битрейта [.] [:]? \ s {1} (\ д {1, } \ SKB [/] с). + * * 1013 [.]

\ S {4} Потока \ S [#] \ d \ d [:] \ SVIDEO [:] (? \ W +) \ S (? \ W +) [,] \ s [,] \ с (? \ д {2,} [х] \ d {2}). +

\ S {4} Потока \ S [#] \ d \ d [.] [:] \ sAudio [:] \ S (? \ W +) [,] \ S (? \ D + \ SHZ) [, ] \ s ((\ д \ schannels |? моно)) [,] \ s (\ W +?) ([,] \ s (\ d {2} \ SKB [/] с) |?)

Я попытался решить проблему с отсутствием строк, изменив одну для включения (regex |), которая должна соответствовать NULL, но это нарушает мое регулярное выражение, которое затем ничего не возвращает. Я думал, что это будет работать, так как выражения читаются справа налево.

(\s{4}Stream\s[#]\d[.]\d[:]\sVideo[:]\s(?<videocodec>\w+)[,]\s(?<pixelformat>\w+)[,]\s(?<resolution>\d{2,}[x]\d{2,}).+|)

Спасибо за любую помощь!

1 Ответ

0 голосов
/ 20 января 2011

возможно, вы могли бы разбить строку и работать с каждой строкой отдельно. поэтому вы должны проходить по строкам и пытаться сопоставить их со списком возможных форматов.

EDIT хорошо, чтобы сохранить в одном регулярном выражении

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

(audio_regex | video_regex | other_regex) {1,3}

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