所以我想重命名文件以匹配plex mediaserver的命名約定。 (SxxEyy)查找python中正則表達式的第二個匹配的索引
現在我有很多文件使用例如。 411代表S04E11。我寫了一個小函數來搜索這個模式的出現,並用正確的約定替換它。像這樣:
pattern1 = re.compile('[Ss]\\d+[Ee]\\d+')
pattern2 = re.compile('[\.\-]\d{3,4}')
def plexify_name(string):
#If the file matches the pattern we want, don't change it
if pattern1.search(string):
return string
elif pattern2.search(string):
piece_to_change = pattern2.search(string)
endpos = piece_to_change.end()
startpos = piece_to_change.start()
#Cut out the piece to change
cut = string[startpos+1:endpos-1]
if len(cut) == 4:
cut = 'S'+cut[0:2] + 'E' + cut[2:4]
if len(cut) == 3:
cut = 'S0'+cut[0:1] + 'E' + cut[1:3]
return string[0:startpos+1] + cut + string[endpos-1:]
而且這個工作得很好。但事實證明,一些文件名將在其中有一年,例如。 the.flash.2014.118.mp4在這種情況下,它會改變2014年
我嘗試使用
pattern2.findall(string)
這確實返回這樣的字符串列表 - > [「0.2014' ,」。 118'],但我想要的是匹配對象的列表,所以我可以檢查是否有2,並在這種情況下使用第二個的開始/結束。在重新編寫文檔時,我似乎無法找到這樣做的地方。我錯過了一些東西,還是需要採取完全不同的方法?
沒有您的代碼有問題。如果我嘗試'the.flash.118.mp4',那麼在那裏找不到'118'。 –
嗯,我剛剛在我的控制檯上做了這個: 'string =「the.flash.2014.118.hdtv-lol.mp4」' 'pattern2 = re.compile('[\。\ - ] \ d {3,4 }')' 'string =「the.flash.2014.118.mp4」' 'result = pattern2.search(string)' 'result' '<_sre.SRE_Match object; span =(9,14),match ='。2014'>' – Thustra