Уведомления

Группа в Telegram: @pythonsu

#1 Окт. 15, 2013 14:05:58

SoWar
Зарегистрирован: 2013-01-23
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

вынуть регуляркой число из строки

Добрый день!
Необходимо из строки вида “13 456 342.12 руб” (кол-во групп разрядов может быть произвольным) вынуть цифры и точку в виде одного элемента массива.
Причем использовать можно только re.findall и сделать надо в одно действие, без объединения элементов массива.
Пробовал:

import re
s = '13 456 342.12 руб'
# список отдельных символов на выходе
out = re.findall('[\d|\.]',s)
# чтобы было то, что нужно добавляем
out = ''.join(out)

Помогите советом, пожалуйста.

Отредактировано SoWar (Окт. 15, 2013 14:15:31)

Офлайн

#2 Окт. 15, 2013 14:26:03

bismigalis
Зарегистрирован: 2010-10-02
Сообщения: 449
Репутация: +  47  -
Профиль   Отправить e-mail  

вынуть регуляркой число из строки

re.sub(r'[^0-9.]', '', s)

или так
re.findall(r'[\d .]+', s)[0].strip()

Отредактировано bismigalis (Окт. 15, 2013 14:31:13)

Офлайн

#3 Окт. 15, 2013 16:17:51

SoWar
Зарегистрирован: 2013-01-23
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

вынуть регуляркой число из строки

Только findall допустИм. Во втором варианте останутся пробелы между числами. В принципе вопрос именно про регулярку: можно ли пропускать часть подоходящего текста, при этом не разбивая на группы.
Т.е. если мне нужны первые две числовые группы, то можно записать:

re.findall('(\d+)\s+(\d+)',s)
# [('13', '456')] на выходе
Можно ли как-нибудь записать так, чтобы \s+ между группами пропускался или это невозможно? Необходимость в группах тогда отпадет.

Офлайн

#4 Окт. 15, 2013 17:15:23

bismigalis
Зарегистрирован: 2010-10-02
Сообщения: 449
Репутация: +  47  -
Профиль   Отправить e-mail  

вынуть регуляркой число из строки

невозможно

SoWar
Во втором варианте останутся пробелы между числами
re.findall(r'[\d .]+', s)[0].replace(' ','')

Отредактировано bismigalis (Окт. 15, 2013 17:21:52)

Офлайн

#5 Окт. 15, 2013 18:52:35

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

вынуть регуляркой число из строки

SoWar
Необходимо из строки вида “13 456 342.12 руб” (кол-во групп разрядов может быть произвольным) вынуть цифры и точку в виде одного элемента массива.
приведи пример выходной строки



Офлайн

#6 Окт. 16, 2013 06:16:17

SoWar
Зарегистрирован: 2013-01-23
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

вынуть регуляркой число из строки

py.user.next:

['13456342.12']
bismigalis, спасибо, но нужен только findall, без дальнейшей обработки.

Отредактировано SoWar (Окт. 16, 2013 06:16:56)

Офлайн

#7 Окт. 16, 2013 20:56:12

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

вынуть регуляркой число из строки

>>> import re
>>> 
>>> s = '13 456 342.12 руб'
>>> out = ''.join(re.findall(r'[\d.]+', s))
>>> out
'13456342.12'
>>>

такой предлагал уже bismigalis
>>> import re
>>> 
>>> s = '13 456 342.12 руб'
>>> out = re.sub(r'[^\d.]', r'', s)
>>> out
'13456342.12'
>>>

SoWar
Можно ли как-нибудь записать так, чтобы \s+ между группами пропускался
нет



Офлайн

#8 Окт. 17, 2013 06:15:13

SoWar
Зарегистрирован: 2013-01-23
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

вынуть регуляркой число из строки

Спасибо.

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version