我正试图从m3u8文件中获得最大分辨率。
下面是示例m3u8内容:
#EXTM3U
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=149000,RESOLUTION=320x180,CODECS="avc1.77.30, mp4a.40.2",CLOSED-CAPTIONS=NONE
https://URL/index_0_av.m3u8?null=0&id=AgBuNs5OuBzaVwrmOF+jXvWJ+HkjL%2fShsITuRsvq00%2f+IYwrOKyjWNrak9RN+Vq0bDNLLJZ47ZVL1w%3d%3d&hdntl=exp=1597650826~acl=%2f*~data=hdntl~hmac=9a46c5ffe594c611b03e0dfbd8e5981aab024fae8492abc40f0fcd7c854af59a
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=298000,RESOLUTION=320x180,CODECS="avc1.77.30, mp4a.40.2",CLOSED-CAPTIONS=NONE
https://URL/index_1_av.m3u8?null=0&id=AgBuNs5OuBzaVwrmOF+jXvWJ+HkjL%2fShsITuRsvq00%2f+IYwrOKyjWNrak9RN+Vq0bDNLLJZ47ZVL1w%3d%3d&hdntl=exp=1597650826~acl=%2f*~data=hdntl~hmac=9a46c5ffe594c611b03e0dfbd8e5981aab024fae8492abc40f0fcd7c854af59a
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=499000,RESOLUTION=640x360,CODECS="avc1.64001f, mp4a.40.2",CLOSED-CAPTIONS=NONE
https://URL/index_2_av.m3u8?null=0&id=AgBuNs5OuBzaVwrmOF+jXvWJ+HkjL%2fShsITuRsvq00%2f+IYwrOKyjWNrak9RN+Vq0bDNLLJZ47ZVL1w%3d%3d&hdntl=exp=1597650826~acl=%2f*~data=hdntl~hmac=9a46c5ffe594c611b03e0dfbd8e5981aab024fae8492abc40f0fcd7c854af59a
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=800000,RESOLUTION=640x360,CODECS="avc1.64001f, mp4a.40.2",CLOSED-CAPTIONS=NONE
https://URL/index_3_av.m3u8?null=0&id=AgBuNs5OuBzaVwrmOF+jXvWJ+HkjL%2fShsITuRsvq00%2f+IYwrOKyjWNrak9RN+Vq0bDNLLJZ47ZVL1w%3d%3d&hdntl=exp=1597650826~acl=%2f*~data=hdntl~hmac=9a46c5ffe594c611b03e0dfbd8e5981aab024fae8492abc40f0fcd7c854af59a
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=1062000,RESOLUTION=960x540,CODECS="avc1.77.30, mp4a.40.2",CLOSED-CAPTIONS=NONE
https://URL/index_4_av.m3u8?null=0&id=AgBuNs5OuBzaVwrmOF+jXvWJ+HkjL%2fShsITuRsvq00%2f+IYwrOKyjWNrak9RN+Vq0bDNLLJZ47ZVL1w%3d%3d&hdntl=exp=1597650826~acl=%2f*~data=hdntl~hmac=9a46c5ffe594c611b03e0dfbd8e5981aab024fae8492abc40f0fcd7c854af59a
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=1361000,RESOLUTION=960x540,CODECS="avc1.77.30, mp4a.40.2",CLOSED-CAPTIONS=NONE
https://URL/index_5_av.m3u8?null=0&id=AgBuNs5OuBzaVwrmOF+jXvWJ+HkjL%2fShsITuRsvq00%2f+IYwrOKyjWNrak9RN+Vq0bDNLLJZ47ZVL1w%3d%3d&hdntl=exp=1597650826~acl=%2f*~data=hdntl~hmac=9a46c5ffe594c611b03e0dfbd8e5981aab024fae8492abc40f0fcd7c854af59a
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=1503000,RESOLUTION=1280x720,CODECS="avc1.64001f, mp4a.40.2",CLOSED-CAPTIONS=NONE
https://URL/index_6_av.m3u8?null=0&id=AgBuNs5OuBzaVwrmOF+jXvWJ+HkjL%2fShsITuRsvq00%2f+IYwrOKyjWNrak9RN+Vq0bDNLLJZ47ZVL1w%3d%3d&hdntl=exp=1597650826~acl=%2f*~data=hdntl~hmac=9a46c5ffe594c611b03e0dfbd8e5981aab024fae8492abc40f0fcd7c854af59a我使用这个正则表达式来获得最大分辨率,这是最后一个网址"av.m3u8?““。
(https.*\w*index_6\w*.*)"我的问题是,如果找不到“720 p的index_6”,我如何才能得到"index_5“,这样结果就不会是空的?
发布于 2020-08-16 08:17:36
您可以使用以下模式:
^https.*index_\d+.*\Z演示。
发生了什么变化:
6替换为\d+,这将匹配一个或多个数字。\Z (即弦端锚固),仅与最后一次匹配。\w*看起来也是多余的(因为它们要么跟在后面,要么前面有.*)。如果需要,您可以添加更多的限制。注:上述解决方案只有在索引按升序排列时才能工作。问题中提到,它应该与最后一个URL相匹配,所以我假设它们是有序的。如果不是这样的话,你可以写这样的东西:
var matches = Regex.Matches(input, @"^https.*index_(\d{1,9}).*$", RegexOptions.Multiline);
if (matches.Count > 0)
{
var targetMatch = matches
.OfType<Match>()
.OrderByDescending(m => int.Parse(m.Groups[1].Value))
.First();
string targetUrl = targetMatch.Value;
}https://stackoverflow.com/questions/63434548
复制相似问题