String.replace ('the', '') покидает белое пространство

StackOverflow https://stackoverflow.com/questions/4839806

  •  27-10-2019
  •  | 
  •  

Вопрос

У меня есть строка, которая является названием исполнителя, который я получаю от тега mp3 id3

sArtist = "The Beatles"

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

sArtist = "Beatles, the"

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

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

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

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

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

Это было полезно?

Решение

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

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

Другие советы

С использованием

sArtist.replace('The','')

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

Возможно, вместо этого используйте regex:

In [11]: import re
In [13]: re.sub(r'^(?i)(a|an|the) (.*)',r'\2, \1','The Beatles')
Out[13]: 'Beatles, The'
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top