Уведомления

Группа в Telegram: @pythonsu

#1 Дек. 26, 2010 08:38:59

alexlp
От:
Зарегистрирован: 2009-11-12
Сообщения: 40
Репутация: +  0  -
Профиль   Отправить e-mail  

Кириллица Юникод Регулярные выражения

Пытаюсь распарсить адреса

    if re.findall(r'^([A-Za-zА-Яа-яёЁ]+\s+[A-Za-zА-Яа-я0-9]+[,-]?[A-Za-zА-Яа-я0-9]+)$', string):
return 'good\t\t' + string
else:
return '\t\t' + string
                Гудыменка 15,275
good Ладожская 19,24
good Ладожская 19,24
Дудыкина 24а,50
Лермонотова 18,132
Лермонотова 18,132
good Веснина 1а,12
Узбекистанская 1а,108
Узбекистанская 1а,108
Узбекистанская 1а,108
Воронежская 1,242
Воронежская 1,242
Воронежская 1,242
Если дело в юникоде и re не понимает его, то почему некоторые строки всё-таки проходят?



Офлайн

#2 Дек. 26, 2010 09:44:09

o7412369815963
От:
Зарегистрирован: 2009-06-17
Сообщения: 1986
Репутация: +  32  -
Профиль   Отправить e-mail  

Кириллица Юникод Регулярные выражения

у тя там скорее не уникод.

вот с уникодом:

# coding: utf-8

import re
d = [u'Гудыменка 15,275',u'Ладожская 19,24',u'Дудыкина 24а,50',u'Лермонотова 18,132',u'Узбекистанская 1а,108']
for s in d:
print '*'.join( re.findall(ur'(\w+)\s([\d\w]+)[,-]?(\d+)', s, re.U)[0] )
результат:
Гудыменка*15*275
Ладожская*19*24
Дудыкина*24а*50
Лермонотова*18*132
Узбекистанская*1а*108

Отредактировано (Дек. 26, 2010 09:46:41)

Офлайн

#3 Дек. 26, 2010 10:03:08

alexlp
От:
Зарегистрирован: 2009-11-12
Сообщения: 40
Репутация: +  0  -
Профиль   Отправить e-mail  

Кириллица Юникод Регулярные выражения

Ну тогда ничего не должно показывать или нет?

type(string) показывает str

спасибо за совет



Офлайн

#4 Дек. 26, 2010 11:14:23

o7412369815963
От:
Зарегистрирован: 2009-06-17
Сообщения: 1986
Репутация: +  32  -
Профиль   Отправить e-mail  

Кириллица Юникод Регулярные выражения

alexlp
Ну тогда ничего не должно показывать или нет?

type(string) показывает str

спасибо за совет
str - это грубо говоря “массив байтов”, не уникод.

глянь эту заметку для лучшего понимания.

Офлайн

#5 Янв. 15, 2017 19:46:31

qman
От:
Зарегистрирован: 2007-07-02
Сообщения: 444
Репутация: +  0  -
Профиль   Отправить e-mail  

Кириллица Юникод Регулярные выражения

Спасибо за тему с ответами! (ключевой момент использование “re.U”)



Офлайн

#6 Март 3, 2017 21:15:15

aon24
Зарегистрирован: 2013-12-16
Сообщения: 9
Репутация: +  0  -
Профиль   Отправить e-mail  

Кириллица Юникод Регулярные выражения

Уже несколько лет не пользуюсь строкой:
# -*- coding: utf-8 -*-

Где-то прочитал, что в 3.х ее можно не писать (по умолчанию utf-8).
Комментарии я пишу на русском, все работает и вдруг Хрясь, облом и непонимание русских букв в utf-8.
Кто хочет проверить, сохраните нижеприведенные строки в кодировке utf-8 в файле test.py
Не верьте всему, что пишут.
Всегда ставьте # -*- coding: utf-8 -*-

print(“”“
Хочу выразить большую благодарность за обучение! Полученная информация оказалась доступной, понятной, полезной и очень интересной, она обязательно пригодится в моей практике! Это первый мой опыт дистанционного обучения и я очень довольна! Желаю вам успехов и дальнейшего процветания!
”“”)

Офлайн

#7 Март 4, 2017 06:36:53

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

Кириллица Юникод Регулярные выражения

aon24
Где-то прочитал, что в 3.х ее можно не писать (по умолчанию utf-8).
Во втором питоне надо было её ставить, потому что там по умолчанию используется us-ascii. Так что ты, скорее всего, запустил этот код во втором питоне. В винде такое бывает, если несколько питонов стоит.



Отредактировано py.user.next (Март 4, 2017 06:37:33)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version