2012-03-30 9 views
0

正規表現パターンを別の正規表現パターンに置き換えようとしています。Regex:パターンを別のパターンに置き換えます。

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' 

、これを達成するための正しい方法は何ですか。

+1

あなたは別で正規表現を交換していません正規表現では、正規表現を使用して文字列を別の文字列に置き換えています。非常に重要な違い。他の*正規表現を処理する正規表現を使用して私を信頼して、あなたが必要としない悪夢です。 –

+0

@JustinMorgan:あなたの入力をありがとうが、正規表現をベースにしたソリューションを使用して、ある正規表現を別の正規表現に置き換えたり、希望する出力を得る正しい方法は何ですか? – RanRag

+0

あなたが言っていることは、検索文字列にグループを取り込み、そのグループを置換文字列に使用したいということです。 – alan

答えて

2

あなたが保存しようとしているものをキャプチャする必要があります。これを試してみてください:

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

(1)生の文字列を使用する必要があります。 (2)戻り値で何もしない場合は、 're.sub'を呼び出すべきではありません。 ;-) – ruakh

+0

今、 ''Awake.S \ x01E \ x02.iNTERNAL.WEBRiP.XViD-GeT.srt''を取得しています。 – RanRag

+0

@ruakh - ありがとう、私はそれが正しいと仮定して彼のpythonコードをカット&ペーストしました。私はPythonの男ではなく、正規表現の人です。あなたは構文を助けることができますか? –

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

OPはもう少し説明が必要だと思います。 – RanRag

+0

'm = replace_pattern.match(st_mkv)'を 'm = replace_pattern.match(st_srt)'に変更したいかもしれません。 – RanRag

+0

@AlexW:私の答えをコピーしてあなたのものに貼り付けるならば、おそらく少なくともすべての変数名を変更するべきです:) – alan

2

さて、あなたはすでに答えを受け入れたように見えますが、私は、これはあなたが」言ったことだと思いますその後、「st_srt」でそれを使用し、「st_mkv」から置き換える文字列を取得している、やろうとしRE:

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ありがとうございました。 – 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 
関連する問題