2012-11-28 6 views
2

파이썬에서 문자열 my_str을 받았습니다. 원하는 작업은 다음과 같습니다. my_str에 하위 문자열 str1이 포함 된 경우 하위 문자열 str1 바로 뒤에 str2 문자열을 삽입하고 나머지는 my_str 그대로 둡니다. 그렇지 않으면 아무 것도하지 않습니다. (의이 my_strstr1되는 더 이상의 문자열을 포함한다고 가정 해 봅시다.) 내가 생각하고 방법은발견 된 경우 부분 문자열 삽입

을 : str1 내가 궁금 my_str

for i in range(0, len(my_str)-len(str1)): 
    if my_str[i:i+len(str1)] == str1: 
    my_str = my_str[0:i] + str2 + my_str[i:] 

내에 존재하는지 찾기 위해에 대한 루프를 수행 이것을 더 짧게 할 수있는 마법의 길이 있는지.

+7

편집 변수'str' 또는'file' 또는'dict' 또는'set' 또는'list' 등 inspectorG4dget 감사 @ – inspectorG4dget

+0

를, 이름을 안하는 데 도움이 : 솔직히 –

답변

8

가장 쉬운 방법은 str.replace() 함께 : 우리는 단순히 본질적으로 새로운 가치를 슬로 팅, 그 자체에 추가 된 새로운 문자열을 원래의 값을 대체

>>> str1 = "blah" 
>>> str2 = "new" 
>>> "testblah".replace(str1, str1+str2) 
'testblahnew' 
>>> "testblahtest".replace(str1, str1+str2) 
'testblahnewtest' 
>>> "test".replace(str1, str1+str2) 
'test' 
>>> "blahtestblah".replace(str1, str1+str2) 
'blahnewtestblahnew' 

.

quick tutorial (예 : replace)

1
def myReplace(myStr, str1, str2): 
    try: 
     i = myStr.index(str1) 
     answer = myStr[:i+len(str1)] + str2 + myStr[i+len(str1):] 
     return answer 
    except ValueError: 
     return myStr 

희망이

+0

질문 - 기본 대체 메서드를 사용하는 대신이 방법을 사용하면 어떤 이점이 있습니까? – Anov

+1

@Anov : 기본 제공되는 대체품은 내가 일반적으로 사용하는 것입니다. OP는 초보자 인 것 같아서 구현하고자하는 것에 더 가까운 답변을주었습니다. 내 답을 완성하기 위해이 작업을 '대체하는'방법을 사용했지만,이 솔루션을 작성하면서 다른 사용자가 이미이 게시물을 게시 한 것으로 나타났습니다. – inspectorG4dget

+1

@ inspectorG4dget'ValueError'를 처리하기 위해 try-except를 사용했다고 생각합니다. 그렇다면'str.find()'를 사용하십시오. 부분 문자열이 발견되지 않으면 -1을 반환합니다. –