Уведомления

Группа в Telegram: @pythonsu

#1 Май 3, 2010 20:11:03

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

r"\w+" как исключить захват цифр?

Всем привет
есть код

import re
c_false = "12 qweasdzxcasd 32"
c_true = "Ivan Petrovich Sidorov"
re_exp = r"\w+"
print re.compile(re_exp).findall(c_false)
Помогите составить регулярное выражение re_exp чтобы проверять строку в соответствии с формой записи ‘Фамилия, Имя, Отчество’.
Шаблон re_exp = r“\w+” кроме символов алфавита захватывает цифры, а мне нужны только символы алфавита.
Всем спасибо
P.S. так тоже немного не то re_exp = r"+"



Отредактировано (Май 3, 2010 20:12:25)

Офлайн

#2 Май 3, 2010 21:17:51

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

r"\w+" как исключить захват цифр?

if re.match(r'^[A-Z][a-z]+\s[A-Z][a-z]+\s[A-Z][a-z]+$',c_true): print 'yes'
тут ещё проверка что-б первая буква слова была большая

Офлайн

#3 Май 4, 2010 15:21:51

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

r"\w+" как исключить захват цифр?

o7412369815963
if re.match(r'^[A-Z][a-z]+\s[A-Z][a-z]+\s[A-Z][a-z]+$',c_true): print 'yes'
тут ещё проверка что-б первая буква слова была большая
Спасибо. Подскажите почему следующий код не работает для юникода?
# -*- coding: utf-8 -*-
import re
c_false = "12 qweasdzxcasd 32"
#c_true = "Ivan Petrovich Sidorov"
c_true = u"Иван Петрович Сидоров"

if re.match(r'^[A-Z][a-z]+\s[A-Z][a-z]+\s[A-Z][a-z]+$',c_true, re.UNICODE ):
print 'yes'
else:
print 'no'
А если Ф.И.О. будет написано в кириллице в кодировке UTF-8 или в юникоде, то оно попадет в множество (для прописных соответственно )?
P.S. забыл поставить знак вопроса



Отредактировано (Май 4, 2010 19:21:31)

Офлайн

#4 Май 4, 2010 15:23:59

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

r"\w+" как исключить захват цифр?

для русского алфавита нужно добавлять А-Я

Офлайн

#5 Май 4, 2010 17:23:29

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

r"\w+" как исключить захват цифр?

уберите контроль регистра re.compile(pattern, re.IGNORECASE), что вы мучаетесь

>>>как исключить захват цифр?
не читаю что там по тексту, но исключить символы можно так это будет (не путать с началом строки ^)



Отредактировано (Май 4, 2010 17:24:10)

Офлайн

#6 Май 4, 2010 18:09:42

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

r"\w+" как исключить захват цифр?

misha111
уберите контроль регистра re.compile(pattern, re.IGNORECASE), что вы мучаетесь
> тут ещё проверка что-б первая буква слова была большая

Офлайн

#7 Май 4, 2010 19:28:14

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

r"\w+" как исключить захват цифр?

извините за тупость , но почему следующий код возвращает отрицание:

# -*- coding: utf-8 -*-
import re
c_true = u"ф"

if re.match(r'^[а-я]$',c_true, re.UNICODE|re.IGNORECASE):
print 'yes'
else:
print 'no'
Если указать переменную c_true = “ф” не как юникод то будет по прежнему отрицание.!



Офлайн

#8 Май 4, 2010 19:29:59

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

r"\w+" как исключить захват цифр?

qman
извините за тупость , но почему следующий код возвращает отрицание:
# -*- coding: utf-8 -*-
import re
c_true = u"ф"

if re.match(r'^[а-я]$',c_true, re.UNICODE|re.IGNORECASE):
print 'yes'
else:
print 'no'
Если указать переменную c_true = “ф” не как юникод то будет по прежнему отрицание.!
При работе с латиницей, код работает верно
# -*- coding: utf-8 -*-
import re
c_true = u"s"

if re.match(r'^[a-z]+$',c_true, re.UNICODE|re.IGNORECASE):
print 'yes'
else:
print 'no'



Офлайн

#9 Май 4, 2010 19:44:45

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

r"\w+" как исключить захват цифр?

Для кириллицы необходимо указывать в юникод

# -*- coding: utf-8 -*-
import re
c_true = u"йдФ"

if re.match(u'^[а-я]+$',c_true, re.UNICODE|re.IGNORECASE):
print 'yes'
else:
print 'no'
Для Ф.И.О
import re
c_true = u"Иван Петрович Сидоров"
if re.match(u'^[А-Я][а-я]+[\s]+[А-Я][а-я]+[\s]+[А-Я][а-я]+[\s]*$',c_true, re.UNICODE):
print 'yes'
else:
print 'no'



Отредактировано (Май 4, 2010 19:57:33)

Офлайн

#10 Май 4, 2010 19:47:57

Nik
От:
Зарегистрирован: 2010-01-10
Сообщения: 77
Репутация: +  0  -
Профиль   Отправить e-mail  

r"\w+" как исключить захват цифр?

для русского алфавита нужно добавлять А-Я
… и про букву ё забывать не следует.

qman, шаблон сделайте unicode-строкой и будет вам ‘yes’.

Вместо match() лучше использовать search()



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version