1

我正在尝试编写一个程序来扫描视频,找到音频和字幕可用的语言,然后将这些发现用于输入。

目前,我正在用这个生成输出:

with open('output.txt', 'wt') as output_f:
    p = subprocess.Popen(command, stdout=output_f, stderr=output_f)

这是我需要的扫描文本。

  + audio tracks:
    + 1, Japanese (aac) (2.0 ch) (iso639-2: jpn)
  + subtitle tracks:
    + 1, English (iso639-2: eng) (Text)(SSA)

所以我需要找出日语前面的数字,但只有在“音轨”之后

同样,我需要找到英文前面的数字,但只有在“字幕轨道”之后

我很确定我需要使用正则表达式来做到这一点,但我不知道从哪里开始。

4

3 回答 3

1

您在这里并不真的需要正则表达式 - 无论如何,对我来说使用其中一个似乎太复杂了。

这是一些常规解析:

with open('output.txt', 'wt') as output_f:
    parseTracks = False
    lines = tuple(output_f)
    for line in lines:
        if 'audio tracks' in line:
            parseTracks = True
        if parseTracks:
            if 'Japanese' in line:
                theNumber = int(''.join([char for char in line if char in '1234567890']))

字幕也是一样。

于 2013-04-24T06:58:55.290 回答
0

你可以这样做:

>>> import re
>>> audio_regex = re.compile(r'\+ audio tracks:\n\s*\+ (?P<number>\d+), (?P<lang>\w+)')
>>> subtitle_regex = re.compile(r'\+ subtitle tracks:\n\s*\+ (?P<number>\d+), (?P<lang>\w+)')
>>> text = '''
...   + audio tracks:
...     + 1, Japanese (aac) (2.0 ch) (iso639-2: jpn)
...   + subtitle tracks:
...     + 1, English (iso639-2: eng) (Text)(SSA)
... '''
>>> match = audio_regex.search(text)  #find the first match
>>> match.group('number')
'1'
>>> match.group('lang')
'Japanese'
>>> audio_regex.findall(text)   #find all matches
[('1', 'Japanese')]
>>> subtitle_regex.findall(text)
[('1', 'English')]

根据文件的格式调整上面的正则表达式或多或少灵活(例如,如果不是单个空格,您可以有更多空格,您可以替换空格\s+以匹配一个或多个空格。

于 2013-04-24T06:56:33.383 回答
0

这将起作用(与 .findall() 一起使用):

(?<=subtitle tracks:\n)\s+\+\s(\d+)
(?<=audio tracks:\n)\s+\+\s(\d+)

检查某个前缀(包括换行符),然后使用空格并选择“+”后的数字

于 2013-04-24T06:55:39.553 回答