2012-03-30 2 views
0

하나의 정규식 패턴을 다른 정규식 패턴으로 바꾸려고합니다.정규식 : 한 패턴을 다른 패턴으로 바꿉니다

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

당신은 서로 정규식을 교체하지 않을 : 다음, 'st_mkv'에서 문자열을 대체 취득 'st_srt'에서 사용되는, 일을하려고 재 regex, regex를 사용하여 문자열을 다른 문자열로 바꿉니다. 매우 중요한 차이. 날 믿어, 정규 표현식을 사용하여 * 다른 * 정규 표현식을 사용하면 불필요한 악몽이다. –

+0

@ JustinMorgan : 귀하의 의견을 주셔서 감사하지만 올바른 방법은 하나의 정규식을 다른 것으로 바꾸거나 정규식 기반 솔루션을 사용하여 원하는 출력을 얻는 것입니다. – RanRag

+0

당신이 말하는 것은 검색 문자열에 그룹을 캡처하고 그룹을 교체 문자열에 사용하려는 것입니다. – alan

답변

2

보존하려는 항목을 캡처해야합니다.

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

여기에 stirngs 복사 :

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 - 고마워, 나는 그 코드가 맞다는 가정하에 파이썬 코드를 잘라내었다. 저는 정규 표현가입니다. 파이썬 녀석이 아닙니다. 문법을 도와 줄 수 있습니까? –

1

봅니다이 정규식을 사용하여 : 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

글쎄, 보이는,하지만이 당신이 '당신을 말한 생각

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 
관련 문제