首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果找到,Regex得到结果,如果没有,则得到另一个结果。

如果找到,Regex得到结果,如果没有,则得到另一个结果。
EN

Stack Overflow用户
提问于 2020-08-16 08:00:36
回答 1查看 97关注 0票数 2

我正试图从m3u8文件中获得最大分辨率。

下面是示例m3u8内容:

代码语言:javascript
复制
#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?““。

代码语言:javascript
复制
(https.*\w*index_6\w*.*)"

我的问题是,如果找不到“720 p的index_6”,我如何才能得到"index_5“,这样结果就不会是空的?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-08-16 08:17:36

您可以使用以下模式:

代码语言:javascript
复制
^https.*index_\d+.*\Z

演示

发生了什么变化:

  • 6替换为\d+,这将匹配一个或多个数字。
  • 在末尾添加\Z (即弦端锚固),仅与最后一次匹配。
  • 捕获组是多余的,所以它被删除了。
  • 这两个\w*看起来也是多余的(因为它们要么跟在后面,要么前面有.*)。如果需要,您可以添加更多的限制。

注:上述解决方案只有在索引按升序排列时才能工作。问题中提到,它应该与最后一个URL相匹配,所以我假设它们是有序的。如果不是这样的话,你可以写这样的东西:

代码语言:javascript
复制
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;
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63434548

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档