2012-04-18 3 views
-1

내 코드에 문자열 (전체적으로 소문자 알파벳으로 구성되어 있음)이 있습니다. 같은 캐릭터 라인에서 교체하려는 캐릭터 다음에 다른 캐릭터의 모습을 조건부로 바꾸어야합니다. 예를 들어, 교체 할 문자가 "e"이고 조건 문자가 "t"이면 "forest"에서 "e"를 "jungle"에서 "e"로 바꿉니다. 간단한 방법으로이를 수행 할 수 있습니까? 파이썬에서? 이 문제에 시간을내어 주셔서 감사합니다.문자열에있는 다른 문자의 모양을 조건부 문자열로 바꾸기 Python

피씨 나는 작업중인 문자에 알파벳이 반복되지 않음에 유의하십시오.

+0

더 "I" "숲"에서,도 아니다 "정글"에 없습니다. –

+1

@SvenMarnach 그들은 "e"를 의미했습니다 –

+0

지적 해 주신 Sven에게 감사드립니다! 수정되었습니다. – hardikudeshi

답변

1

무엇이 잘못 되었나요?

if st.find("e") < st.find("t"): 
    st.replace("e","i",1) 

하고 읽을 수 발생이 고유하지 않으면 당신이 그 후 te의 모든 항목을 바꾸려면 당신은 또한

>>> pos_t=st.find("t") 
>>> "".join(e if (e != 'e' or i > pos_t) else 'i' for i,e in enumerate(st)) 
+3

'st = 'theater ''는 어떻습니까? –

+0

@F.J 이것은''rfind()''를 사용하여 고칠 수 있습니다 - 이것은 첫 번째 인스턴스에서만 작동합니다. –

+0

@FJ : OP는 'e'가 하나만 나오는 단어를 찾고 있습니다. – Abhijit

2
>>> import re 
>>> re.sub(r'e(.*t)', r'i\1', "forest") 
'forist' 
>>> re.sub(r'e(.*t)', r'i\1', "jungle") 
'jungle' 
+1

''re.sub (r'e (. * t) ','r'i \ 1 ','eett ')''''''나는''을 줄 것이다. –

3

을 할 수

, 당신은 사용할 수 있습니다 다음 :

>>> import re 
>>> re.sub(r'e(?=.*t)', 'i', 'forest') 
'forist' 
>>> re.sub(r'e(?=.*t)', 'i', 'jungle') 
'jungle' 
>>> re.sub(r'e(?=.*t)', 'i', 'greet') 
'griit' 

여기에는 lookahead은 문자를 사용하지 않고 t이 문자열의 어느 위치에 있는지 나중에 확인하는 제로 너비 어설 션입니다. 이렇게하면 정규식에서 첫 번째 대신이 조건에 맞는 각 e을 찾을 수 있습니다.

+0

+1 그냥 게시했지만 엉망입니다. 너는 맞다. –

0

이 '와 전자의'모두를 대체 할 내가 만약 마지막 t 앞에 오는 부분 :

def sub(x): 
    return x[:x.rfind('t')].replace('e','t') + x[x.rfind('t'):] 

결과 : 다음

>>> sub('feeoeresterette') 
'fttotrtsttrttte' 
>>> sub('forest') 
'fortst' 
>>> sub('greet') 
'grttt' 
>>> sub('theater') 
'thtater'' 
0

당신이 원하는 일을해야하는 기능입니다 :

>>> def replace(source, replacee, replacement, conditional): 
...  if source.find(replacee) < source.rfind(conditional): 
...   return source.replace(replacee, replacement) 
...  else: 
...   return source 

또는, 당신은 덜 자세한하려는 경우 :

,
>>> def replace(source, replacee, replacement, conditional): 
...  return source.find(replacee) < source.rfind(conditional) and source.replace(replacee, replacement) or source 

모두 수익률이 동일한 결과를 산출해야한다, 여기에 몇 가지 예는 다음과 같습니다

>>> replace('forest', 'e', 'i', 't') 
'forist' 
>>> replace('jungle', 'e', 'i', 't') 
'jungle' 
>>> replace('tales', 'e', 'i', 't') 
'tales' 
관련 문제