Форум сайта python.su
0
Добрый день!
Необходимо из строки вида “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)
Офлайн
47
re.sub(r'[^0-9.]', '', s)
re.findall(r'[\d .]+', s)[0].strip()
Отредактировано bismigalis (Окт. 15, 2013 14:31:13)
Офлайн
0
Только findall допустИм. Во втором варианте останутся пробелы между числами. В принципе вопрос именно про регулярку: можно ли пропускать часть подоходящего текста, при этом не разбивая на группы.
Т.е. если мне нужны первые две числовые группы, то можно записать:
re.findall('(\d+)\s+(\d+)',s) # [('13', '456')] на выходе
Офлайн
47
невозможно
SoWar
Во втором варианте останутся пробелы между числами
re.findall(r'[\d .]+', s)[0].replace(' ','')
Отредактировано bismigalis (Окт. 15, 2013 17:21:52)
Офлайн
857
SoWarприведи пример выходной строки
Необходимо из строки вида “13 456 342.12 руб” (кол-во групп разрядов может быть произвольным) вынуть цифры и точку в виде одного элемента массива.
Офлайн
0
py.user.next:
['13456342.12']
Отредактировано SoWar (Окт. 16, 2013 06:16:56)
Офлайн
857
>>> import re >>> >>> s = '13 456 342.12 руб' >>> out = ''.join(re.findall(r'[\d.]+', s)) >>> out '13456342.12' >>>
>>> import re >>> >>> s = '13 456 342.12 руб' >>> out = re.sub(r'[^\d.]', r'', s) >>> out '13456342.12' >>>
SoWarнет
Можно ли как-нибудь записать так, чтобы \s+ между группами пропускался
Офлайн
0
Спасибо.
Офлайн