регулярное выражение разделить и извлечь несколько частей из строки - PullRequest
0 голосов
/ 15 мая 2010

Я пытаюсь извлечь некоторые части строки "Видео:" из текста ниже.

Seems stream 0 codec frame rate differs from container frame rate: 30000.00 (300
00/1) -> 14.93 (1000/67)
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'C:\a.3gp':
  Metadata:
    major_brand     : 3gp5
    minor_version   : 0
    compatible_brands: 3gp5isom
  Duration: 00:00:45.82, start: 0.000000, bitrate: 357 kb/s
    Stream #0.0(und): Video: mpeg4, yuv420p, 352x276 [PAR 1:1 DAR 88:69], 344 kb
/s, 14.93 fps, 14.93 tbr, 90k tbn, 30k tbc
    Stream #0.1(und): Audio: aac, 16000 Hz, mono, s16, 11 kb/s
    Stream #0.2(und): Data: mp4s / 0x7334706D, 0 kb/s
    Stream #0.3(und): Data: mp4s / 0x7334706D, 0 kb/s*

Это вывод из командной строки ffmpeg, где я могу получить видео: часть с

private string ExtractVideoFormat(string rawInfo)
{
    string v = string.Empty;
    Regex re = new Regex("[V|v]ideo:.*", RegexOptions.Compiled);
    Match m = re.Match(rawInfo);
    if (m.Success)
    {
        v = m.Value;
    }
    return v;
}

и результат

mpeg4, yuv420p, 352x276 [PAR 1: 1 DAR 88:69], 344 кб

Что я пытаюсь сделать, это как-то разбить эту строку и получить

mpeg4
yuv420p
352x276 [PAR 1:1 DAR 88:69]
344 kb

присваивается различным строковым объектам вместо одного

Ответы [ 3 ]

1 голос
/ 15 мая 2010
String[] words = result.Split(", " , StringSplitOptions.None)

Даст вам следующие слова в массиве (я помещаю их в новые строки, чтобы было понятнее, что возвращается)

mpeg4

yuv420p

352x276

[PAR 1: 1 DAR 88:69]

344 кб

1 голос
/ 15 мая 2010

Я считаю, что использование приложения regex, такого как RegexBuddy, является очень полезным визуальным инструментом при разработке и отладке Regex:

http://www.regexbuddy.com/

0 голосов
/ 15 мая 2010

Вы можете разбить строку, используя String.Split().

string[] parts = String.Split(new [] { ", " }, text);

Но когда я использую ваше выражение, оно соответствует следующему.

Видео: mpeg4, yuv420p, 352x276 [PAR 1: 1 DAR 88:69], 344 кбит / с, 14,93 кадра в секунду, 14,93 тбр, 90 тыс тбн, 30 тыс тбк Stream # 0.1 (und): аудио: aac, 16000 Гц, моно s16, 11 кбит / с Поток № 0.2 (und): Данные: mp4s / 0x7334706D, поток 0 кбит / с # 0.3 (und): Данные: mp4s / 0x7334706D, 0 кб / с *

Это может быть связано с разрывом строки в вашей строке.

Вы можете использовать следующее выражение

[Vv]ideo:(,? *(?<item>[^,])+)*

и захватывать все интересные части в названном элементе группы без необходимости дополнительного разделения.

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