Python 使用正则表达式格式化标题中的文本时出现问题

Python 使用正则表达式格式化标题中的文本时出现问题,python,regex,caption,Python,Regex,Caption,我试图得到字幕文本来分析它,但我一直在试图以可读的方式得到字幕文本。我使用正则表达式来获取字幕编号、字幕时间和字幕语音。当讲到演讲时,我会看到很多空行,因为字幕的设置就像图片一样。所以我只想创建一个只包含语音的列表,而不是空白行< /强>。我得到的列表也在图像中 以下是标题中的示例: 1 00:00:00,030 --> 00:00:05,370 so here we are at the offices of my 2 00:00:02,240 --> 00:00:05,370

我试图得到字幕文本来分析它,但我一直在试图以可读的方式得到字幕文本。我使用正则表达式来获取字幕编号、字幕时间和字幕语音。当讲到演讲时,我会看到很多空行,因为字幕的设置就像图片一样。所以<强>我只想创建一个只包含语音的列表,而不是空白行< /强>。我得到的列表也在图像中

以下是标题中的示例:

1
00:00:00,030 --> 00:00:05,370
so here we are at the offices of my

2
00:00:02,240 --> 00:00:05,370



3
00:00:02,250 --> 00:00:07,319
accountants of your Eric Biddle mr.

4
00:00:05,360 --> 00:00:07,319



5

:


我建议您将文本作为一个整体进行扫描,而不是单独的一行。您还可以在模式中使用组来捕获和包含数据。我将阅读以下数据:

打开('test_subtitle.srt','r')作为f:
副标题=f.阅读()
然后使用以下代码匹配单个部分并提取数据:

重新导入
num_pat=r'(\d+)
时间{pat=r'(\d{2,}:\d{2}:\d{2}、\d{3})-->(\d{2,}:\d{2}:\d{2}、\d{3})
句子\u pat=r'([^\n]*)\n'
data\u pattern=re.compile(r'\n'.join([num\u pat,time\u pat,句子\u pat]))
打印(“数据模式:”,数据模式)
关于finditer中的i(数据模式,副标题):
打印('-'*20)
印刷品(一组(1))
打印(f'time:{i.group(2)}-->{i.group(3)})
打印('文本:',报告(i.group(4)))
打印()

我在代码中注意到的一个问题是,在定义模式时,使用的是普通字符串,而不是原始字符串,并且没有避开反斜杠。如果要使用反斜杠而不转义,则应使用原始字符串。希望这有帮助。

这真的很有帮助。非常感谢你。我不习惯你以前做的一些事情,但我可以看到我可以用这个达到我想去的地方。我想用语言处理器分析文本,然后在时间戳中返回标志。@luka1156只需查找正则表达式组,我想您会更好地理解。我可以看到您的代码非常现代,我尝试做的一些事情已经过时。再次感谢,是的!现在我明白了。编译格式中的每个闭括号都是一个组。您正在使用group()调用它们。共有4个已编译组。组(0)将是整个匹配字符串
import re

filename = r'test_subtitle.srt'
pattern_number = re.compile('^\d+$')
pattern_time = re.compile('^[\d]+:[\d]+:[\d]+,[\d]+ --> [\d]+:[\d]+:[\d]+,[\d]+$')
pattern_speech = re.compile("^[A-Za-z,;'\"\\s]+[.?!]*$")

for i, line in enumerate(open(filename)):
    for match in re.findall(pattern_number, line):
        print(match)

for i, line in enumerate(open(filename)):
    for match in re.findall(pattern_time, line):
        print(match)

speech = []

for i, line in enumerate(open(filename)):
    for match in re.findall(pattern_speech, line):
        speech.append(match)

print(speech)