.net 使用regex从webvtt中提取

.net 使用regex从webvtt中提取,.net,regex,webvtt,.net,Regex,Webvtt,我正在尝试构建一个在.Net环境中使用的正则表达式,它允许我从webvtt文件中提取信息 我想从下一行中提取时间码信息和相应的信息,这些信息可能是字幕,也可能是其他内容。 我遇到的问题是,下一行上的信息有时是一行,有时跨越多行,例如: 00:00:02.736 --> 00:00:06.072 line:79.33% position:10.00% align:start AND YOUR GRACE? 00:00:06.072 --> 00:00:08.875 line:

我正在尝试构建一个在.Net环境中使用的正则表达式,它允许我从webvtt文件中提取信息

我想从下一行中提取时间码信息和相应的信息,这些信息可能是字幕,也可能是其他内容。 我遇到的问题是,下一行上的信息有时是一行,有时跨越多行,例如:

00:00:02.736 --> 00:00:06.072 line:79.33% position:10.00% align:start 
   AND YOUR GRACE?

00:00:06.072 --> 00:00:08.875 line:74.00% position:10.00% align:start 
  WHAT WILL YOU DO
     ABOUT THAT?
我需要确保我得到了所有这些,而不会无意中进入下一组的开始

我试过这个:

\n(\d{2}:\d{2}:\d{2}.\d{3})(.|\n)*(?<!\d{2}:\d{2}:\d{2}.\d{3})

第二(或第三,取决于上述内容):

然后:

其次是:

WHAT WILL YOU DO
 ABOUT THAT?
etc

看来您可以使用

(?m)^(\d{2}:\d{2}:\d{2}\.\d+) +--> +(\d{2}:\d{2}:\d{2}\.\d+).*[\r\n]+\s*(?s)((?:(?!\r?\n\r?\n).)*)

详细信息

  • (?m)
    -多行模式打开
  • ^
    -行的开始(由于
    (?m)
  • (\d{2}:\d{2}:\d{2}\.\d+)
    -第1组:时间戳模式
  • +-->+
    -1+空格,
    -->
    ,1+空格
  • (\d{2}:\d{2}:\d{2}\.\d+)
    -第2组:时间戳模式
  • *[\r\n]+\s*
    -行的其余部分(
    *
    ),1+换行符(
    [\r\n]+
    ),然后0+空格(
    \s*
  • (?s)
    -从现在开始启用点调用(
    匹配换行符)
  • ((?:(?!\r?\n\r?\n)。*)
    -第3组:任何未开始双线中断序列的字符,0+次

如果您是用C#编写代码,那么使用双换行符进行拆分怎么样
var res=str.Split(新[]{“\r\n\r\n”},StringSplitOptions.RemoveEmptyEntries)
?如果您无法访问代码,请尝试“谢谢”。这接近我想要实现的目标。但是,它正在用时间码捕获行的其余部分,例如“行:79.33%位置:10.00%对齐:开始”是否有办法忽略第二个时间码之后的行的其余部分,并从新行再次捕获?抱歉,我正在尝试看看是否可以采取不同的方法。我已经回复并更新了我的原始问题,比如?是的。我想这就是诀窍。谢谢
00:00:02.736 --> 00:00:06.072
AND YOUR GRACE?
00:00:06.072 --> 00:00:08.875
WHAT WILL YOU DO
 ABOUT THAT?
(?m)^(\d{2}:\d{2}:\d{2}\.\d+) +--> +(\d{2}:\d{2}:\d{2}\.\d+).*[\r\n]+\s*(?s)((?:(?!\r?\n\r?\n).)*)