gpt4 book ai didi

正则表达式匹配行是否存在

转载 作者:行者123 更新时间:2023-12-04 23:31:20 26 4
gpt4 key购买 nike

我正在尝试使用正则表达式破译 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 kb/s
流 #0.0:音频:vorbis、11025 Hz、单声道、s16、49 kb/s
必须至少指定一个输出文件

我的正则表达式

s{2}Duration[:]\s(?\d{2}[:]\d{2}[:]\d{2})[.]\d{2}[,]\s{1}start[:]\s{1}\d{1,}[.]\d{6}[,]\s{1}bitrate[:]\s{1}(?\d{1,}\skb[/]s).+

\s{4}Stream\s[#]\d[.]\d[:]\sVideo[:]\s(?\w+)[,]\s(?\w+)[,]\s(?\d{2,}[x]\d{2,}).+

\s{4}Stream\s[#]\d[.]\d[:]\sAudio[:]\s(?\w+)[,]\s(?\d+\sHz)[,]\s(?(\d\schannels|mono))[,]\s(?\w+)([,]\s(?\d{2,}\skb[/]s)|)



我试图解决缺少行的问题,方法是将一个更改为包含 (regex|),它应该匹配 NULL,但它破坏了我的正则表达式,然后什么都不返回。我认为这会起作用,因为表达式是从右到左阅读的。
(\s{4}Stream\s[#]\d[.]\d[:]\sVideo[:]\s(?<videocodec>\w+)[,]\s(?<pixelformat>\w+)[,]\s(?<resolution>\d{2,}[x]\d{2,}).+|)

谢谢你的帮助!

最佳答案

也许您可以拆分字符串并分别处理每一行。因此,您将遍历这些行并尝试将它们与可能的格式列表进行匹配。

编辑
可以保留一个正则表达式

用“或”分隔每行的正则表达式并用括号括起来。最后加一个量词。因此它最多可以匹配 3 行匹配任何一种不同的行格式。

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

关于正则表达式匹配行是否存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4745966/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com