Уведомления

Группа в Telegram: @pythonsu

#1 Июнь 20, 2012 14:15:37

Serbis
От:
Зарегистрирован: 2012-02-13
Сообщения: 38
Репутация: +  0  -
Профиль   Отправить e-mail  

Регулярка работает не так как нужно

Имеется список элементов, в котором элемент может быть представлен в двух вариантах.
Квадратный метр - 055
Килограмм - 166
Делаю регулярку для извлечение самого текста, т.е. одного или двух слов до пробела, но никак не получается.

        p = re.compile('.*[ ]')
	t = str(toUtf8(self.unit.currentText()))
	ite = p.finditer(t)
	for match in ite:
	  index = match.span()
	print t
	print index[0], index[1]
	print t[index[0]:index[1]]
	
В результате получаю несколько непонятно поведение. Регулярка в однословной строке не считает первый пробел пробелом, а двухсловной и первый и второй пробел. Вот реузльтат:

Децилитр - 118
0 19
Децилитр -

Квадратный дециметр - 053
0 40
Квадратный дециметр -

В принципе можно плюнуть просто отступив 3 позиции с конца, но мне интересно почему так получается…



Офлайн

#2 Июнь 20, 2012 14:58:36

fata1ex
От:
Зарегистрирован: 2009-07-11
Сообщения: 732
Репутация: +  52  -
Профиль   Отправить e-mail  

Регулярка работает не так как нужно

s.split(' - ')



Офлайн

#3 Июнь 20, 2012 16:39:35

agalen
От:
Зарегистрирован: 2011-03-23
Сообщения: 185
Репутация: +  17  -
Профиль   Отправить e-mail  

Регулярка работает не так как нужно

В регулярке ‘*’ съедает максимальне число подходящих символов. А вот ‘*?’ - минимальное.



Офлайн

#4 Июнь 21, 2012 02:04:49

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

Регулярка работает не так как нужно

>>> import re
>>> 
>>> lines = """
... Квадратный метр - 055
... Килограмм - 166
... Децилитр - 118
... Квадратный дециметр - 053
... """
>>> 
>>> lst = re.findall(r'^(.+)\s+-\s+(\d+)$', lines, re.M)
>>> print(lst)
[('Квадратный метр', '055'), ('Килограмм', '166'), ('Децилитр', '118'), ('Квадратный дециметр', '053')]
>>>



Отредактировано py.user.next (Июнь 21, 2012 02:05:54)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version