regex - 仅当同一行后面包含字母时,正则表达式才匹配以数字开头的行

标签 regex pcre regex-lookarounds subtitle geany

我有一个如下所示的文本/字幕文件:

1
00:00:58,178 --> 00:00:59,327
Some text!

2
00:00:59,329 --> 00:01:01,819
<i>Some text</i>

3
00:01:40,512 --> 00:01:41,629
2350 some text.

4
00:01:41,631 --> 00:01:43,771
Some text.

现在我差不多弄清楚了,如何通过下面的正则表达式来匹配实际的字幕行:

^([^\d^\n].*)

但是如果相同的实际字幕行以数字开头(示例中的第三个字幕)怎么办?所以现在我还必须匹配那些以数字开头的行,前提是它们后来在行结束之前的同一行中有字母。

如何通过与上面使用的正则表达式结合来做到这一点?

最佳答案

更新#1

此更新旨在带来巨大的性能提升

我想字幕可以是多行的:

^\d+:\d+:[^-]+-->.*\R+\K.+(?:\R.+)*(?=\s*(?:^\d+$|\z))

说明:

^\d+:\d+:[^-]+-->.*     # Match time's line
\R+\K                   # One or more newlines (& forget all previous matched characters)
.+                      # Match next immediate line
(?:\R.+)*               # And continuing lines of subtitle (if any)
(?=\s*(?:^\d+$|\z))     # Up to a digit-only-line or end of input string

<强> Live demo

关于regex - 仅当同一行后面包含字母时,正则表达式才匹配以数字开头的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40894343/

相关文章:

python - 将 Popen.communicate() 输出与正则表达式匹配不起作用

Java 正则表达式,正面看后面看负面前瞻

ruby - 如何使用 Ruby 从字符串中删除除数字 ","和 "."之外的所有字符?

php - 如何在 PHP 字符串中仅在完整的 CamelCase 单词之间添加空格,完整地跳过单个大写字母?

php - PCRE 库版本太旧

regex - 为什么 ^A|bA 比 grep -P 的负向后视慢,而 grep -E 快?

regex - 使用 C++ RegEx 进行后视的替代方法是什么?

php - 如果在匹配之前遇到下划线则匹配字符串

java - 匹配前面没有文字的电话号码

PHP ereg 与 preg