Найти - Пользователи
Полная версия: Регулярка работает не так как нужно
Начало » Python для новичков » Регулярка работает не так как нужно
1
Serbis
Имеется список элементов, в котором элемент может быть представлен в двух вариантах.
Квадратный метр - 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 позиции с конца, но мне интересно почему так получается…
fata1ex
s.split(' - ')
agalen
В регулярке ‘*’ съедает максимальне число подходящих символов. А вот ‘*?’ - минимальное.
py.user.next
>>> import re
>>> 
>>> lines = """
... Квадратный метр - 055
... Килограмм - 166
... Децилитр - 118
... Квадратный дециметр - 053
... """
>>> 
>>> lst = re.findall(r'^(.+)\s+-\s+(\d+)$', lines, re.M)
>>> print(lst)
[('Квадратный метр', '055'), ('Килограмм', '166'), ('Децилитр', '118'), ('Квадратный дециметр', '053')]
>>>
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