2012-03-30 10 views
0

Ich versuche, ein Regex-Muster durch ein anderes Regex-Muster zu ersetzen.Regex: Ersetzen Sie ein Muster durch ein anderes

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) 

Ich weiß, dass die Verwendung von S\1E\2 falsch ist hier. Der Grund, \1 and \2 zu verwenden, ist, den Wert 01 and 02 zu fangen und es in S\1E\2 zu verwenden.

Meine gewünschte Ausgabe ist:

st_srt = 'Awake.S01E02.iNTERNAL.WEBRiP.XViD-GeT.srt' 

Also, was ist der richtige Weg, dies zu erreichen.

+1

Sie sind nicht einen regulären Ausdruck mit einem anderen zu ersetzen Regex, Sie verwenden eine Regex, um eine Zeichenfolge durch eine andere Zeichenfolge zu ersetzen. Sehr wichtiger Unterschied. Vertrauen Sie mir, einen Regex zu verwenden, um * andere * Regexes zu verarbeiten, ist ein Alptraum, den Sie nicht brauchen. –

+0

@JustinMorgan: Danke für Ihre Eingabe, aber was ist der richtige Weg, um eine Regex durch eine andere zu ersetzen oder um meine gewünschte Ausgabe mit einer Regex-basierten Lösung zu erreichen. – RanRag

+0

Was Sie sagen, ist, dass Sie eine Gruppe in Ihrer Suchzeichenfolge erfassen und die Gruppe in der Ersetzungszeichenfolge verwenden möchten. – alan

Antwort

2

Sie müssen erfassen, was Sie erhalten möchten. Versuchen Sie folgendes:

pattern = re.compile(r'(\d+)x(\d+)') # for st_srt 
st_srt = re.sub(pattern, r'S\1E\2', st_srt) 
+0

(1) Sie sollten rohe Zeichenketten verwenden. (2) Sie sollten 're 'nicht aufrufen, wenn Sie nichts mit seinem Rückgabewert machen wollen. ;-) – ruakh

+0

Jetzt bekomme ich "Awake.S \ x01E \ x02.iNTERNAL.WEBRiP.XViD-GeT.srt''. – RanRag

+0

@ruakh - Danke, ich habe seinen Python-Code ausgeschnitten und eingefügt, unter der Annahme, dass es korrekt war. Ich bin ein Regex-Typ, kein Python-Typ. Kannst du mit der Syntax helfen? –

1

Versuchen Sie es mit diesen regex:

([\w+\.]+){5}\-\w+ 

kopieren Sie die stirngs in hier: http://www.gskinner.com/RegExr/

und fügen Sie den Regex an der Spitze.

Er erfasst die Namen der einzelnen Strings und lässt dabei die Erweiterung aus.

Sie können dann die gewünschte Erweiterung an die gewünschte Zeichenfolge anhängen.

EDIT:

Hier ist, was ich zu tun pflegen, was Sie nach:

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' 
+0

Ich denke OP braucht ein wenig mehr Erklärung. – RanRag

+0

Sie können 'm = replace_pattern.match (st_mkv)' zu 'm = replace_pattern.match (st_srt)' ändern. – RanRag

+0

@AlexW: Alter, wenn Sie meine Antwort in Ihre kopieren und einfügen, sollten Sie wahrscheinlich mindestens alle Variablennamen ändern :) – alan

2

Nun, es sieht aus wie Sie bereits eine Antwort akzeptiert, aber ich denke, das ist das, was Sie sagten, Sie‘ re zu tun versuchen, die Zeichenfolge zu ersetzen bekommen das ist von ‚st_mkv‘, verwenden Sie es dann in ‚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 
+0

+1 Danke noch eine nette Antwort. – RanRag

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 
Verwandte Themen