【问题标题】:How do I manipulate strong in SRT file in python?如何在 python 中的 SRT 文件中操作强?
【发布时间】:2021-03-30 22:08:05
【问题描述】:

如果我有这样的 SRT 文件:

1
00:00:00672 --> 00:00:05568
This is about

2
00:00:05664 --> 00:00:11175
whatever

3
00:00:11303 --> 00:00:16359
I don't know

4
00:00:16423 --> 00:00:20647
you don't know

但是格式有问题,因为时间戳中缺少逗号,应该是这样的:

1
00:00:00,672 --> 00:00:05,568
This is about

2
00:00:05,664 --> 00:00:11,175
whatever

3
00:00:11,303 --> 00:00:16,359
I don't know

4
00:00:16,423 --> 00:00:20,647
you don't know

如何用 python 修复它?谢谢。

【问题讨论】:

  • 在文本编辑器中解决这个问题会更容易。这是一次性的事情,还是一直在生成错误的事情?
  • 这是浪费时间,因为有超过 100 行。谷歌翻译后一直生成错误。

标签: python string text


【解决方案1】:

您可以匹配格式的开头,并断言最后 3 位数字。

--> \d{2}:\d{2}:\d{2}(?=\d{3}\b)

Regex demo

并替换为完整匹配和逗号

r"\g<0>,"

查看Python demo

import re
 
regex = r"--> \d{2}:\d{2}:\d{2}(?=\d{3}\b)"
 
s = ("1\n"
    "00:00:00672 --> 00:00:05568\n"
    "This is about\n\n"
    "2\n"
    "00:00:05664 --> 00:00:11175\n"
    "whatever\n\n"
    "3\n"
    "00:00:11303 --> 00:00:16359\n"
    "I don't know\n\n"
    "4\n"
    "00:00:16423 --> 00:00:20647\n"
    "you don't know")
 
result = re.sub(regex, r"\g<0>,", s)
 
if result:
    print (result)

输出

1
00:00:00672 --> 00:00:05,568
This is about

2
00:00:05664 --> 00:00:11,175
whatever

3
00:00:11303 --> 00:00:16,359
I don't know

4
00:00:16423 --> 00:00:20,647
you don't know

【讨论】:

  • 这只是一个例子,如果我有超过 100 行,我该怎么处理 s = 部分?谢谢
  • @saga s 包含带有您要更改的数据的字符串。例如,如果您从文件中读取数据,则可以读取所有行,然后将内容写回/文件中。
  • 我这个方法有问题,除了不能正确读取的最后一个时间戳之外,一切正常。有没有办法解决这个问题?
  • @saga 你有一个不起作用的例子吗?或者你可以更新这个例子regex101.com/r/dPI0pT/1 吗?
  • @saga 这里的演示工作正常吗? regex101.com/r/0hAxvS/1你能用你现有的不匹配的数据创建一个可重现的例子吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多