正则表达式从字符串中获取比特率值

时间:2013-07-05 10:59:32

标签: c# regex

我在命令行中使用FFMPEG来获取ASP.NET C#应用程序中我的文件的媒体信息。我需要从包含FFMPEG输出的字符串值中获取比特率值,如下所示:

  Duration: 00:00:02.60, start: 0.000000, bitrate: 517 kb/s
    Stream #0.0(eng): Video: h264, yuv420p, 1024x768, 15.00 tb(r)
    Stream #0.1(eng): Audio: aac, 22050 Hz, mono, s16

所以我想使用Regex从bitrate: 517 kb/s中取出整数值...我的文件在上下文中的比特率只能达到1500左右,所以它需要能够获得2 ,3和4位数值。

如何实现这一目标?

干杯

5 个答案:

答案 0 :(得分:2)

这应该这样做。

Match match = Regex.Match(ffmpegStr, @"bitrate: (\d+)");

if (match.Success)
{
    Console.WriteLine(match.Groups[1].Value);
}

ffmpegStr是您的数据。

您可以将+替换为{2,4},仅匹配2到4位数字。


或者,您可以使用ffprobe输出机器读取友好数据。

答案 1 :(得分:1)

您可以使用+限定符获取与字符串一样多的数字:

bitrate: (?<bitrate>\d+) kb/s

"bitrate"捕获组中读取值。

答案 2 :(得分:0)

(bitrate:\s)(\d+)

以上将匹配并创建2个组。整数值将在第二组中。

答案 3 :(得分:0)

没有正则表达式....

string line = "Duration: 00:00:02.60, start: 0.000000, bitrate: 517 kb/s";
string pattern = "bitrate: ";
int bitrate = -1;
int index = line.IndexOf(pattern, StringComparison.OrdinalIgnoreCase);
if(index >= 0)
{
    index += pattern.Length;
    int endIndex = line.IndexOf(" kb/s", index + 1, StringComparison.OrdinalIgnoreCase);
    if(endIndex >= 0)
    {
        int.TryParse(line.Substring(index, endIndex - index), out bitrate);
    }
}

http://ideone.com/FE1cQP

答案 4 :(得分:0)

看起来你正在解析FFmpeg输出。 FFmpeg允许输出到JSON(以及其他一些格式),以便更轻松地获取所需的任何数据。您可能希望调查该选项,而不是依赖于正则表达式。