Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/264.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 解析M3U文件_C#_Regex - Fatal编程技术网

C# 解析M3U文件

C# 解析M3U文件,c#,regex,C#,Regex,我试图解析一个m3u文件,但遇到了问题 M3U文件如下所示: #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

我试图解析一个m3u文件,但遇到了问题

M3U文件如下所示:

#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...
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);
                }
我需要得到tvg名称的值和同一条目的URL

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

#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...
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);
                }
List ChannelList=newlist();
List posOfTvgName=GetPositions(m3u,“tvg名称”);
var reg=new Regex(“tvg name=\”*?\”);
var匹配=注册匹配(m3u);
foreach(匹配项中的变量项)
{
通道c=新通道();
字符串channelName=item.ToString();
channelName=item.ToString().Remove(0,10);
channelName=channelName.Remove(channelName.Length-1);
c、 名称=信道名称;
渠道清单。添加(c);
}
但我遇到了一点麻烦,因为我不知道如何获取下一行的内容


有什么建议吗?

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

这些值位于组1和组2中,可以使用属性访问这些值

如果下一行应该以http开头,并且可能是可选的s:

\btvg-name="([^"]+)".*\r?\n(https?\S+)
  • \btvg name=
    匹配
    tvg name=
    前面有一个单词边界
  • “([^”]+)”
    捕获组1在双引号之间,匹配除
  • *\r?\n
    将除换行符以外的任何字符匹配0多次,然后匹配换行符
  • (https?\S+)
    捕获组2,匹配http、可选S和1+乘以非空白字符
|

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

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);
}

像这样尝试
\btvg name=“([^”]+)”*\r?\n(https?\S+
。。。如果您想捕获第三个组(例如,如果存在组标题),您可以使用:\btvg name=“([^“]+)”*\r?\b组标题=“([^“]+)”*\r?\n(https?\S+)@Martin请将此解决方案标记为答案(如果确实存在)。如果属性的顺序相同,我如何添加组标题和tvg徽标?@Web.11,例如,您可以使用可选的非捕获组,其中包含一个捕获组。再见,非常感谢