Косая черта в Python replace () - PullRequest
1 голос
/ 19 ноября 2010

Я работал над решателем анаграмм в Python 2.7 и натолкнулся на любопытство, которому я не смог найти объяснения. Программа читает из файла, который содержит список анаграмм в следующем формате:

#    anagram
#    anagram
#    anagram
.
.
.
etc

Читая это непосредственно в строку, Python, очевидно, все комментирует, поэтому я играл с replace (), пытаясь найти способ вырезать хеш-символы. Попытка ...

string = file.read().replace('#', '')

... выдаст пустую строку. Я попытался использовать обратную косую черту перед хешем, но тупой и опечатал переднюю косую черту, которая дала мне результат:

string = file.read().replace('/#', '')
string = '#\tanagram\n#\tanagram\n#\tanagram'

Удаление лишних символов в этот момент было несложным делом, и программа работает отлично. Тем не менее, я не доволен использованием строки кода, которую я не до конца понимаю. Мне не очень повезло найти какую-либо документацию или код, который объясняет / делает нас чем-то вроде этого, поэтому я либо ищу не в том месте, либо ищу не то.

Может ли кто-нибудь объяснить, почему он так себя ведет?

Ответы [ 2 ]

3 голосов
/ 19 ноября 2010

Попробуйте это:

[s.lstrip('#\t') for s in file.read().split('\n')]

Python не обрабатывает # специально каким-либо образом внутри строки, вам не нужно избегать его.

0 голосов
/ 19 ноября 2010

Изменили ли вы что-нибудь еще, когда заменили '#' на '/#'?Попробуйте снова запустить вашу программу, в точности так, как она есть, но удалите /.# не является специальным символом в строках Python.

В коде, который вы нам показали, в замене ничего не делается, поскольку в вашей строке нет экземпляров '/#'.

Пример интерактивного сеанса:

>>> "#foo bar\n\t#blah".replace("#", "")
'foo bar\n\tblah'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...