【问题标题】:Regex: match line if previous line satisfies a criteria正则表达式:如果前一行满足条件,则匹配行
【发布时间】:2013-12-17 11:53:43
【问题描述】:

什么是匹配前一行以一组字符开头的行的正则表达式?

我正在尝试解析M3U files,我需要匹配前一行以#EXTINF:开头的行所以如果我们举这个例子:

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:10
#EXTINF:11.54
ASMIK_tid_0000250058_m.600000-00000.ts
#EXTINF:8.51
ASMIK_tid_0000250058_m.600000-00001.ts
#EXTINF:11.76
ASMIK_tid_0000250058_m.600000-00002.ts
#EXTINF:10.05
ASMIK_tid_0000250058_m.600000-00003.ts
etc...

我只想提取这些行:

ASMIK_tid_0000250058_m.600000-00000.ts
ASMIK_tid_0000250058_m.600000-00001.ts
ASMIK_tid_0000250058_m.600000-00002.ts
ASMIK_tid_0000250058_m.600000-00003.ts

我尝试了this answer 的变体和这个:(?#EXT.*\n) 但没有运气...

【问题讨论】:

  • 您能发布您尝试过的最成功的变体吗?另外,你要找的那些行会不会是那些不以#开头的行?
  • 我在正则表达式中添加了我的最佳尝试。
  • 你知道objective c的正则表达式是否支持可变宽度lookbehinds吗?我不知道如何在目标 c 中编写代码,否则,我会尝试使用 ideone。否则,您是否使用替换?如果是这样,您也许可以使用类似that?
  • 我很难过。您认为您可以在 ideone(我之前链接的站点)上放一些东西并将链接放入代码示例吗?使用交互式代码进行调试会更容易,而且我不必等待您检查某些东西是否有效。希望该站点具有运行正则表达式所需的库。
  • ideone 没有 Cocoa API,NSRegularExpression 是其中的一部分。我尝试使用this,但我遇到了同样的问题......无论如何,你的正则表达式确实有效,所以在这个阶段这是一个 obj-c 问题,我将在其他地方解决。谢谢!

标签: objective-c regex m3u8


【解决方案1】:

首先你必须确保你使用的函数是匹配整个文件而不是逐行匹配,否则这是不可能的。

那么你需要指定一个lookbehind:

(?<=#EXTINF.*\r\n).*

如果您的正则表达式实现不支持后视或后视内的重复,您可以改用两个捕获组:

(#EXTINF.*\r\n)(.*)

显然,您会简单地忽略第一个捕获组,但将所有数据保留在第二个捕获组中。

如果需要手动指定.不匹配换行符,可以在正则表达式开头指定模式:(?-s)

【讨论】:

  • 我认为你的意思是提前。
  • 我的意思是向后看,除了我写了一个前瞻 :) 现在已编辑。
  • @VasiliSyrakis 谢谢,但你的正则表达式不起作用:gskinner.com/RegExr/?37m7a
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-07-21
  • 1970-01-01
  • 2019-02-13
  • 2021-09-30
  • 1970-01-01
  • 1970-01-01
  • 2022-01-02
相关资源
最近更新 更多