string.replace ('the', '') оставляет пустое пространство - PullRequest
0 голосов
/ 30 января 2011

У меня есть строка с именем исполнителя, которую я получаю из тега MP3 ID3

sArtist = "The Beatles"

Я хочу изменить ее на

sArtist = "Beatles, the"

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

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

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

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

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

Ответы [ 2 ]

8 голосов
/ 30 января 2011

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

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'
2 голосов
/ 30 января 2011

В одну сторону:

>>> 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'
>>>
...