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

解析大型M3U文件时出错
EN

Stack Overflow用户
提问于 2019-06-15 13:47:46
回答 1查看 1.7K关注 0票数 1

M3U文件是一个播放列表文件,它包含描述媒体文件、它们的名称、id、类别等的条目列表。第一行是元数据,第二行是文件或流URL。

例:

代码语言:javascript
复制
#EXTINF:-1 tvg-id="ChannelName" tvg-name="|FR| Channel" tvg-logo="http://logo" timeshift="1" group-title="|FR| FrenchChannel",|FR| Channel Fullname
URL

我的文件包含大约90,000条条目和160,000行。重量在20兆左右。

我想解析这个文件,并获取每个条目。我试过用这个正则表达式:

代码语言:javascript
复制
'(.+?),(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)(.+)\s*(.+)\s*'

它为我获取不同匹配组中的元数据、全名和URL。它可以很好地工作在不同的子集上,包括3万行和5万行。然而,当处理完整的集合时,匹配的时间太长了。我不能让它结束而不得不终止它。

我无法让这个解析工作,这是一个设计模式问题,还是只是正则表达式太慢?我很困惑。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-06-15 14:16:45

一种选择可能是重复键值对,而不是使用非贪婪的.+?来防止不必要的回溯和省略正的查找头(?=

代码语言:javascript
复制
^(#\S+(?:\s+[^\s="]+="[^"]+")+),(.*)\s*(.*)

解释

  • 字符串的^开始
  • (第一次捕获组
    • #\S+匹配#后面跟着一个非空格字符的0+时间
    • (?: [^\s="]+="[^"]+")+重复1+,重复键值对,在键值对前面加上1+,再加上空格字符

  • )闭组1
  • ,(.*)匹配逗号并捕获第2组中任意字符的0+次数
  • \s*匹配0+乘以空格字符
  • 第3组中的(.*)捕获与任何字符0+时间相匹配

Regex演示

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56610938

复制
相关文章

相似问题

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