首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >解析M3U文件

解析M3U文件
EN

Stack Overflow用户
提问于 2019-09-16 20:33:07
回答 1查看 4.1K关注 0票数 4

我正试图解析一个m3u文件,但遇到了麻烦。

M3U文件如下所示:

代码语言:javascript
复制
#EXTM3U
#EXTINF:-1 tvg-id="6 eren" tvg-name="6'eren" tvg-logo="http://195.154.221.171/picons/6erendk.png" group-title="Denmark",6'eren
http://URL/something
#EXTINF:-1 tvg-id="6 eren" tvg-name="6'eren FHD" tvg-logo="http://195.154.221.171/picons/6erenhddk.png" group-title="Denmark",6'eren FHD
http://URL/something
#EXTINF:-1 tvg-id="6 eren" tvg-name="6'eren FHD" tvg-logo="http://195.154.221.171/picons/6erenhddk.png" group-title="Denmark",6'eren FHD
http://portal.siptveu.com:8080/8IsZPSZ7sc/IMd7O87LUj/9266
#EXTINF:-1 tvg-name="6'eren HD" group-title="Denmark",6'eren HD
http://URL/something
#EXTINF:-1 tvg-id="Animal Planet" tvg-name="Animal Planet FHD" tvg-logo="http://195.154.221.171/picons/animalplanethddk.png" group-title="Denmark",Animal Planet FHD
http://URL/something
#EXTINF:-1 tvg-id="Animal Planet" tvg-name="Animal Planet HD" tvg-logo="http://195.154.221.171/picons/animalplanethddk.png" group-title="Denmark",Animal Planet HD
http://URL/something
#EXTINF:-1 tvg-name="Boomerang" tvg-logo="http://195.154.221.171/picons/boomerangse.png" group-title="Denmark",Boomerang
http://URL/something
#EXTINF:-1 tvg-name="C More First FHD" group-title="Denmark",C More First FHD
http://URL/something
#EXTINF:-1 tvg-name="C More Hits FHD" group-title="Denmark",C More Hits FHD
http://URL/something

etc...

我需要获得相同条目的tvg名称和URL的值。

到目前为止,我已经创建了获得tvg名称的代码,如下所示:

代码语言:javascript
复制
List<Channel> ChannelList = new List<Channel>();
                List<int> posOfTvgName = GetPositions(m3u, "tvg-name");

                var reg = new Regex("tvg-name=\".*?\"");
                var matches = reg.Matches(m3u);
                foreach (var item in matches)
                {
                    Channel c = new Channel();
                    string channelName = item.ToString();
                    channelName = item.ToString().Remove(0, 10);
                    channelName = channelName.Remove(channelName.Length - 1);
                    c.Name = channelName;

                    ChannelList.Add(c);
                }

但我遇到了一些障碍,因为我不知道如何获得下一行的内容。

有什么建议吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-09-16 20:40:42

您可以使用两个捕获组,对于tvg名称的值,可以使用一个与除"以外的任何字符匹配的否定字符类,而不是一个非贪婪的.*?

这些值在第1组和第2组中,可以使用Match.Groups属性访问。

如果下一行应该以http开头,或者以可选的s开头:

代码语言:javascript
复制
\btvg-name="([^"]+)".*\r?\n(https?\S+)
  • \btvg-name=匹配tvg-name=加上一个单词边界
  • "([^"]+)"在双引号之间捕获组1,匹配除"以外的任何字符
  • .*\r?\n匹配除换行符0+次数以外的任何字符,然后匹配换行符。
  • (https?\S+)捕获组2,匹配http、可选的s和1+时间为非空格字符。

Regex演示 x- C#演示

如何从组中获取值的示例:

代码语言:javascript
复制
string pattern = @"\btvg-name=""([^""]+)"".*\r?\n(https?\S+)";
string input = @"#EXTM3U
#EXTINF:-1 tvg-id=""6 eren"" tvg-name=""6'eren"" tvg-logo=""http://195.154.221.171/picons/6erendk.png"" group-title=""Denmark"",6'eren
http://URL/something ...";

foreach (Match m in Regex.Matches(input, pattern))
{
    Console.WriteLine("tvg-name: {0} URL: {1}" , m.Groups[1].Value, m.Groups[2].Value);
}
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57964048

复制
相关文章

相似问题

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