簡體   English   中英

正則表達式從字符串中拆分並提取多個部分

[英]regex split and extract multiple parts from a string

我正在嘗試從文本下方提取“視頻:”行的某些部分。

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 kb

我想做的就是以某種方式拆分該行並獲得

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

分配給不同的字符串對象而不是單個

String[] words = result.Split(", " , StringSplitOptions.None)

將在數組中給您以下單詞(我將它們放在換行符上,只是為了使返回的內容更清楚)

MPEG4

YUV420P

352x276

[PAR 1:1 DAR 88:69]

344 KB

我發現在開發和調試Regex時使用正則表達式應用程序(例如RegexBuddy)是非常有用的可視化工具:

http://www.regexbuddy.com/

您可以使用String.Split()拆分字符串。

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

但是,當我使用您的表達式時,它與以下內容匹配。

視頻:mpeg4,yuv420p,352x276 [PAR 1:1 DAR 88:69],344 kb /s、14.93 fps,14.93 tbr,90k tbn,30k tbc流#0.1(und):音頻:aac,16000 Hz,單聲道, s16,11 kb / s流#0.2(und):數據:mp4s / 0x7334706D,0 kb / s流#0.3(und):數據:mp4s / 0x7334706D,0 kb / s *

這可能是由於字符串中的換行符。

您可以使用以下表達式

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

並捕獲命名組項目中所有有趣的部分,而無需執行其他拆分。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM