Найти - Пользователи
Полная версия: Регуляные выражения из sed в Python
Начало » Python для экспертов » Регуляные выражения из sed в Python
1 2
Dobrodel
Благодарю,
Если не трудно подскажите всё же, как победить:

Если символы \n находятся в строке с английскими буквами, то фильтр срабатывает и возвращает то что нужно, однако если он находится в строке с русскими буквами, то возвращает пустое значение.
Подскажите что можно предпринять?
sypper-pit
покажи пример текста, для обработки, а то там нет русского в твоём примере. Так же не понятно где именно стоит перенос на новую строку. Как вариант используй разделение /n.
sypper-pit
http://python.su/forum/topic/25089/?page=1#post-133767
Dobrodel
Проблема оказалась не в том, что не удаляются символы из строки, а в том, что не удаляются символы из списка. Другими словами:

>>>dd = ‘моя строка \n\n что то еще’
>>>dd.replace(\n,')
>>>‘моя строка что то еще’
Работает, а вот так не работает:

>>>dd = [‘моя строка \n\n что то еще’]
>>>str(dd).replace(\n,')
>>>[‘моя строка \\n\\n что то еще’]

Как победить?

P.S.
Такой вариант так же не работает:
>>>import re
>>> re.sub(r'[\n]','',str(dd))
>>>[‘моя строка \\n\\n что то еще’]
sypper-pit
Вот как вариант
str(dd[0]).replace(\\n,')
При запросе к списку нужно чётко указать в какой переменной в этом списке хочешь обращаться
 [0]
- это первая по списку
[1]
- 2я… итд, по этому надо будет тебе еще весть список перебрать. Прежде чем начинать обрабатывать. Почитай матчесть в сторону работы со списками. http://www.ibm.com/developerworks/ru/library/l-python_part_3/

re.sub(r'[\\n]','',str(dd[0]))
так как-то.

Если нужно перебирать каждую строку и вырезать там это безобразие. Правь при помощи цикла.
Dobrodel
Благодарю Всех, за участие.
Решение было на поверхности, правда немного нетривиальное.))

>>>dd = [‘моя строка \n\n что то еще’]
>>>str(dd).replace(\\n,')
>>>[‘моя строка что то еще’]

Другими словами нужно было искать, после преобразования списка в строку, не ‘\n’, а ‘\\n'. Небольшие странности.))
Хотя Вы наверняка это все уже знали.
Ещё раз всех благодарю.
sypper-pit
да экранирование символа должно быть, не заметил сразу. Просто это разбирается еще в самом начале изучения питона и не обратил внимания, что ты его не использовал.
py.user.next
Dobrodel
>>> dd = ['моя строка \n\n что то еще']
>>> str(dd).replace('\n', '')

Вот так лучше не делать. Список к строке приводишь - это хак, а хаков следует избегать. Потому что когда из-за него возникнет ошибка какая-нибудь, нужно будет тратить время на исправление хака путём переделывания в нормальный вид.

В частности, в этом коде, если тебе нужно будет заменить не символ \n, а символ [, то из-за этого хака ты не сможешь этого сделать. То есть, либо тебе нужно будет его переписывать по-нормальному, либо отказаться от своей фичи.

Поэтому пиши сразу по-нормальному.

>>> lst = ['abc \n\n def', 'abc \n\n def', 'abc \n\n def']
>>> 
>>> lst = [i.replace('\n', 'x') for i in lst]
>>> lst
['abc xx def', 'abc xx def', 'abc xx def']
>>>

Dobrodel
Такой вариант так же не работает:
>>> import re
>>> 
>>> s = 'abc \n\n def'
>>> re.sub(r'\n', 'x', s)
'abc xx def'
>>>
Dobrodel
Благодарю, принял к сведению.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB