2010-05-15 58 views
0

我想从下面的文本中提取“视频:”行的一些部分。正则表达式分割并从字符串中提取多个部分

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的命令线的输出,其中i可以得到视频:部分与

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

我想要做的是以某种方式PLIT该行并得到

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

分配给不同的字符串对象,而不是单一的

+0

请重新格式化我的问题 – nLL 2010-05-15 17:17:47

回答

0

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

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

但是,当我用你的表达它匹配以下内容。

视频:MPEG4,YUV420P,352x276 [PAR 1:1 DAR 88:69],344 kb/s的,14.93帧, 14.93 TBR,90K TBN,30k的TBC流#0.1(UND):音频:数据:mp4s/0x7334706D,0kb/s数据:mp4s/0x7334706D,0kb/s数据流:#0.3(und) s *

这可能是由于字符串中的换行符。

你可以使用下面的表达式

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

,并捕捉到命名组项目的所有有趣的部分,而无需执行其他分裂的需要。

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

会给你下面的话在阵列中(我把他们在新的行只是为了更清楚什么是返回)

MPEG4

YUV420P

352x276

[PAR 1:1 DAR 88:69]

344 kb

1

我发现使用正则表达式的应用程序,如使用RegexBuddy是一个非常有用的可视化工具开发和调试正则表达式的时候:

http://www.regexbuddy.com/

相关问题