замена строки питона неправильно удаляет пробел - PullRequest
3 голосов
/ 01 сентября 2011

У меня есть метод

def strip_searchname(self, original_name):
    taboo = {" and ", " of ", " at ", " in ", ":", "-", ",", " the ", " "}
    searchname = original_name
    for word in taboo:
        print(searchname)
        searchname = searchname.replace(word, "")
    searchname = re.sub('[^a-zA-Z]', "", searchname)
    searchname= searchname.upper()
    return searchname

(да, я знаю, что его части излишни)

Первое .replace, кажется, удаляет всю строку пробела, что я НЕ хочу. Почему это? Как мне этого избежать?

(например, вывод:

Seattle University
SeattleUniversity
SeattleUniversity
SeattleUniversity
SeattleUniversity
SeattleUniversity
SeattleUniversity
SeattleUniversity
SeattleUniversity
SEATTLEUNIVERSITY

)

Ответы [ 3 ]

10 голосов
/ 01 сентября 2011

Чего я не понимаю, так это почему он выполняет "" заменить ДО "из" заменить, например, когда "из" замена идет до пробела в списке.

Это не список.

taboo = {" and ", " of ", " at ", " in ", ":", "-", ",", " the ", " "}

является литералом множества. Попробуйте заменить {и} на [и], чтобы получить нужный вам порядок.

0 голосов
/ 01 сентября 2011

Возможно, проблема в том, что taboo - это не список, это набор, а наборы не сохраняют порядок.

См.

>>> taboo = ['a', 'b', ' ']
>>> print taboo
['a', 'b', ' ']
>>> taboo = {'a', 'b', ' '}
>>> print taboo
set(['a', ' ', 'b'])
0 голосов
/ 01 сентября 2011

метод замены в строке заменяет все вхождения первого аргумента вторым аргументом. В вашем цикле, когда строка word равна " ", метод замены удалит все вхождения " " в searchname.

...