2011-01-29 5 views
0

У меня есть строка, которая является именем художника, который я получаю от MP3 ID3 тегаstring.replace (далее ', «») покидает белое пространство

sArtist = "The Beatles" 

То, что я хочу, чтобы изменить до

sArtist = "Beatles, the" 

У меня есть два различных проблемы. Моя первая проблема заключается в том, что я, похоже, торгую «The» for ».

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

Моя вторая проблема заключается в том, что, так как я должен проверить, как «The» и «» я использовать sArtist.lower(). Однако это меняет мой результат от «Битлз», «до битлов». Чтобы решить эту проблему, я просто удалил .lower и добавил вторую строку кода, чтобы явно искать оба случая.

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

Таким образом, проблема мне действительно нужно решить почему я вместо «тем» с <SPACE> вместо <NULL>. Но если кто-то есть лучший способ сделать это, я бы рад за образование :)

ответ

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

Использование

sArtist.replace('The','') 

опасно. Что произойдет, если имя художника - Теодор?

Возможно использовать регулярное выражение вместо:

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 (r '\ 1, the', 'The Beatles')' – ide

+0

@ Джейсон ЛеБрун и @ide: Спасибо вам за ваши предложения. – unutbu

Смежные вопросы