Уведомления

Группа в Telegram: @pythonsu

#1 Сен. 25, 2014 06:50:56

Dobrodel
Зарегистрирован: 2014-09-24
Сообщения: 50
Репутация: +  0  -
Профиль   Отправить e-mail  

Регуляные выражения из sed в Python

Благодарю,
Если не трудно подскажите всё же, как победить:

Если символы \n находятся в строке с английскими буквами, то фильтр срабатывает и возвращает то что нужно, однако если он находится в строке с русскими буквами, то возвращает пустое значение.
Подскажите что можно предпринять?

Офлайн

#2 Сен. 25, 2014 07:02:34

sypper-pit
От: Ulan-Ude(msk)
Зарегистрирован: 2009-01-30
Сообщения: 1102
Репутация: +  6  -
Профиль   Отправить e-mail  

Регуляные выражения из sed в Python

покажи пример текста, для обработки, а то там нет русского в твоём примере. Так же не понятно где именно стоит перенос на новую строку. Как вариант используй разделение /n.

Отредактировано sypper-pit (Сен. 25, 2014 07:05:01)

Офлайн

#3 Сен. 25, 2014 07:41:58

sypper-pit
От: Ulan-Ude(msk)
Зарегистрирован: 2009-01-30
Сообщения: 1102
Репутация: +  6  -
Профиль   Отправить e-mail  

Регуляные выражения из sed в Python

Офлайн

#4 Сен. 25, 2014 13:52:25

Dobrodel
Зарегистрирован: 2014-09-24
Сообщения: 50
Репутация: +  0  -
Профиль   Отправить e-mail  

Регуляные выражения из sed в Python

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

>>>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 что то еще’]

Отредактировано Dobrodel (Сен. 25, 2014 14:19:59)

Офлайн

#5 Сен. 25, 2014 14:31:11

sypper-pit
От: Ulan-Ude(msk)
Зарегистрирован: 2009-01-30
Сообщения: 1102
Репутация: +  6  -
Профиль   Отправить e-mail  

Регуляные выражения из sed в Python

Вот как вариант

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]))
так как-то.

Если нужно перебирать каждую строку и вырезать там это безобразие. Правь при помощи цикла.

Отредактировано sypper-pit (Сен. 25, 2014 16:42:15)

Офлайн

#6 Сен. 25, 2014 15:18:52

Dobrodel
Зарегистрирован: 2014-09-24
Сообщения: 50
Репутация: +  0  -
Профиль   Отправить e-mail  

Регуляные выражения из sed в Python

Благодарю Всех, за участие.
Решение было на поверхности, правда немного нетривиальное.))

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

Другими словами нужно было искать, после преобразования списка в строку, не ‘\n’, а ‘\\n'. Небольшие странности.))
Хотя Вы наверняка это все уже знали.
Ещё раз всех благодарю.

Отредактировано Dobrodel (Сен. 25, 2014 15:20:31)

Офлайн

#7 Сен. 25, 2014 16:41:46

sypper-pit
От: Ulan-Ude(msk)
Зарегистрирован: 2009-01-30
Сообщения: 1102
Репутация: +  6  -
Профиль   Отправить e-mail  

Регуляные выражения из sed в Python

да экранирование символа должно быть, не заметил сразу. Просто это разбирается еще в самом начале изучения питона и не обратил внимания, что ты его не использовал.

Отредактировано sypper-pit (Сен. 25, 2014 16:43:15)

Офлайн

#8 Сен. 26, 2014 23:04:24

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9891
Репутация: +  854  -
Профиль   Отправить e-mail  

Регуляные выражения из sed в Python

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



Отредактировано py.user.next (Сен. 26, 2014 23:08:27)

Офлайн

#9 Сен. 27, 2014 09:02:55

Dobrodel
Зарегистрирован: 2014-09-24
Сообщения: 50
Репутация: +  0  -
Профиль   Отправить e-mail  

Регуляные выражения из sed в Python

Благодарю, принял к сведению.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version