1

文字列(字幕)を次から変換したい:

585
00:59:59,237 --> 01:00:01,105
- It's all right. - He saw us!

586
01:00:01,139 --> 01:00:03,408
I heard you the first time.

の中へ

59:59 - 大丈夫です。- 彼は私たちを見た!

01:00:01 初めて聞きました。

*私が望むのは: 時間が 1 時間以内の場合は "00:" プレフィックスを削除し、時間が 1 時間を超える場合はそのままにしておきます *

私の正規表現は次のとおりです。

pat = re.compile(r"""
    #\s*                    # Skip leading whitespace
    \d+\s                   # remoe lines contain only numbers
    ((?:(?:00)|(?P<hour>01)):(?P<time>\d{2}:\d{2})[,0-9->]+.*)[\r\n]+(?P<content>.*)[\r\n]+
    """, 
    re.VERBOSE)
data = pat.sub(r"\g<hour>\g<time> \g<content>", data)

' ' が使用されていない場合にのみ機能し\g<hour>ます。誰でも私を助けることができますか?

4

2 に答える 2

2

私は、これがあなたが探しているものだと思います:

import re

s = """
585
00:59:59,237 --> 01:00:01,105
- It's all right. - He saw us!

586
01:00:01,139 --> 01:00:03,408
I heard you the first time.
"""

for line in re.findall(r'(\d+:)(\d+:\d+)(?:.*\n)(.*)', s):
    if line[0] == '00:':
        print ' '.join(line[1:])
    else:
        print ' '.join([''.join(line[0:2]), line[2]])

出力:

# 59:59 - It's all right. - He saw us!
# 01:00:01 I heard you the first time.
于 2013-05-26T13:59:28.127 に答える
1

非再アプローチを提供するためだけに(はるかに高速になるはずです):

a = """585
00:59:59,237 --> 01:00:01,105
- It's all right. - He saw us!

586
01:00:01,139 --> 01:00:03,408
I heard you the first time."""

for i, x in enumerate(a.split('\n')):
    m = i % 4
    if m == 0:
        continue
    elif m == 3:
        continue
    elif m == 1:
        print x[:x.find(":", x.find(":") + 1)],
    elif m == 2:
        print x
于 2013-05-26T14:20:41.143 に答える