2011-01-29 2 views
0

나는 내가 MP3 ID3 태그에서 얻을 아티스트의 이름 인 문자열을하려면 string.replace ('이', '')를 떠나 공백은

sArtist = "The Beatles" 

내가 원하는 변경하는 것입니다 그것 to

sArtist = "Beatles, the" 

나는 2 개의 다른 문제로 달리고있다. 내 첫 번째 문제는 내가 ''for ''를 거래하는 것 같다.

if sArtist.lower().find('the') == 0: 
    sArtist = sArtist.lower().replace('the','') 
    sArtist = sArtist + ", the" 

내 두 번째 문제는 내가 모두 '이'와 확인해야하기 때문에 '는'나는 sArtist.lower()를 사용이다. 그러나 이것은 나의 결과를 "Beatles, the"에서 "beatles,"로 바꿉니다. 이 문제를 해결하기 위해 .lower를 제거하고 코드의 두 번째 줄을 추가하여 명시 적으로 두 경우를 모두 찾습니다. I '는'<SPACE> 대신 <NULL>로 교체하고 왜

if sArtist.lower().find('the') == 0: 
    sArtist = sArtist.replace('the','') 
    sArtist = sArtist.replace('The','') 
    sArtist = sArtist + ", the" 

그래서 정말 해결해야 할 문제입니다. 누군가가이 작업을 수행 할 수있는 더 좋은 방법이 있는지하지만

sArtist.replace('The','') 

가 위험 사용 교육 :

답변

2

한 가지 방법 :

>>> def reformat(artist,beg): 
... if artist.startswith(beg): 
...  artist = artist[len(beg):] + ', ' + beg.strip() 
... return artist 
... 
>>> reformat('The Beatles','The ') 
'Beatles, The' 
>>> reformat('An Officer and a Gentleman','An ') 
'Officer and a Gentleman, An' 
>>> 
+0

당신은 그 답을 발견했습니다 ... 나는 'The'다음의 공간을 잊고있었습니다. 나는 그것을 'the'에서 'the'로 바 꾸었으며 그 이유는 내가 이전에 을 얻었던 이유입니다. .startswith 옵션에 대해 알지 못했습니다. 대신에 불행하게 사용하십시오. – ccwhite1

8

에 대한 기쁠 것입니다. 예술가의 이름이 Theodore라면 어떻게 될까요?

아마도 대신 정규식을 사용

In [11]: import re 
In [13]: re.sub(r'^(?i)(a|an|the) (.*)',r'\2, \1','The Beatles') 
Out[13]: 'Beatles, The' 
+0

멋진 대답을. 다음은 다른 무시 단어로 쉽게 확장 할 수있는 작은 변경 사항입니다. re.sub (r '^ ((? i) a | the | an) (. *)', r '\ 2, \ 1' 'The Beatles') –

+1

Regexp가 분명히 여기에 있습니다. 대문자와 소문자가 구별되지 않는 플래그는 두 번째 질문도 해결할 수 있습니다 :'re.compile (r '^ The (. *)', re.I) .sub (비틀즈 ')' – ide

+0

@ Jason LeBrun 및 @ide : 귀하의 제안에 감사드립니다. – unutbu

관련 문제