正则表达式:将一种模式替换为另一种模式

时间:2012-03-30 21:19:14

标签: python regex python-2.7

我试图用另一个正则表达式模式替换一个正则表达式模式。

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'

那么,实现这一目标的正确方法是什么。

4 个答案:

答案 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