我试图用另一个正则表达式模式替换一个正则表达式模式。
st_srt = 'Awake.01x02.iNTERNAL.WEBRiP.XViD-GeT.srt'
st_mkv = 'Awake.S01E02.iNTERNAL.WEBRiP.XViD-GeT.mkv'
pattern = re.compile('\d+x\d+') # for st_srt
re.sub(pattern, 'S\1E\2',st_srt)
我知道这里使用S\1E\2
是错误的。使用\1 and \2
的原因是捕获值01 and 02
并在S\1E\2
中使用它。
我想要的输出是:
st_srt = 'Awake.S01E02.iNTERNAL.WEBRiP.XViD-GeT.srt'
那么,实现这一目标的正确方法是什么。
答案 0 :(得分:2)
你需要捕捉你想要保留的东西。试试这个:
pattern = re.compile(r'(\d+)x(\d+)') # for st_srt
st_srt = re.sub(pattern, r'S\1E\2', st_srt)
答案 1 :(得分:2)
好吧,看起来你已经接受了答案,但我认为这就是你说你要做的事情,从'st_mkv'获取替换字符串,然后在'st_srt'中使用它:
import re
st_srt = 'Awake.01x02.iNTERNAL.WEBRiP.XViD-GeT.srt'
st_mkv = 'Awake.S01E02.iNTERNAL.WEBRiP.XViD-GeT.mkv'
replace_pattern = re.compile(r'Awake\.([^.]+)\.')
m = replace_pattern.match(st_mkv)
replace_string = m.group(1)
new_srt = re.sub(r'^Awake\.[^.]+\.', 'Awake.{0}.'.format(replace_string), st_srt)
print new_srt
答案 2 :(得分:1)
尝试使用此正则表达式:
([\w+\.]+){5}\-\w+
将stirngs复制到这里:http://www.gskinner.com/RegExr/
并将正则表达式粘贴到顶部。
它捕获每个字符串的名称,省略扩展名。
然后,您可以继续将所需的扩展名附加到所需的字符串。
编辑:
以下是我过去做过的事情:
import re
st_srt = 'Awake.01x02.iNTERNAL.WEBRiP.XViD-GeT.srt' // dont actually need this one
st_mkv = 'Awake.S01E02.iNTERNAL.WEBRiP.XViD-GeT.mkv'
replace_pattern = re.compile(r'([\w+\.]+){5}\-\w+')
m = replace_pattern.match(st_mkv)
new_string = m.group(0)
new_string += '.srt'
>>> new_string
'Awake.S01E02.iNTERNAL.WEBRiP.XViD-GeT.srt'
答案 3 :(得分:0)
import re
st_srt = 'Awake.01x02.iNTERNAL.WEBRiP.XViD-GeT.srt'
st_mkv = 'Awake.S01E02.iNTERNAL.WEBRiP.XViD-GeT.mkv'
pattern = re.compile(r'(\d+)x(\d+)')
st_srt_new = re.sub(pattern, r'S\1E\2', st_srt)
print st_srt_new