Поиск в Regex для извлечения float из строки. питон

import re sequence = 'i have -0.03 dollars in my hand' m = re.search('(have )(-\w[.]+)( dollars\w+)',sequence) print m.group(0) print m.group(1) print m.group(2) 

Ищете способ извлечь текст между двумя вхождениями. В этом случае в формате «i have» следуют – float, а затем «доллары \ w +»

Как использовать re.search для извлечения этого поплавка? Почему группы не работают таким образом? Я знаю, что есть что-то, что я могу настроить, чтобы заставить его работать с этими группами. любая помощь будет с благодарностью

Я думал, что могу использовать группы с paranthesis, но у меня есть eror

3 Solutions collect form web for “Поиск в Regex для извлечения float из строки. питон”

-\w[.]+ не соответствует -0.03 потому что [.] соответствует . буквально потому, что . находится внутри [...] .

\w после dollars также препятствует тому, чтобы шаблон соответствовал sequence . После dollars нет слова.

Используйте (-?\d+\.\d+) как шаблон:

 import re sequence = 'i have -0.03 dollars in my hand' m = re.search(r'(have )(-?\d+\.\d+)( dollars)', sequence) print m.group(1) # captured group start from `1`. print m.group(2) print m.group(3) 

BTW, количество захваченных групп начинается с 1 . ( group(0) возвращает целую строку)

Ваше регулярное выражение не соответствует нескольким причинам:

  • для этого всегда требуется - (ОК в этом случае сомнительно вообще)
  • он требует ровно одну цифру перед . (и он даже позволяет без цифр, таких как A ).
  • он позволяет любое количество точек, но не больше цифр после точек.
  • он требует одного или нескольких буквенно-цифровых символов сразу после dollars .

Так что это будет соответствовать "I have -X.... dollarsFOO in my hand" но не "I have 0.10 dollars in my hand" .

Кроме того, нет смысла использовать фиксированные тексты для захвата круглых скобок.

 m = re.search(r'\bhave (-?\d+\.\d+) dollars\b', sequence) 

будет иметь гораздо больше смысла.

Этот вопрос уже задавался во многих формулировках раньше. Вы ищете регулярное выражение, которое найдет число. Поскольку форматы чисел могут включать в себя десятичные знаки, запятые, экспоненты, знаки плюс / минус и ведущие нули, вам потребуется надежное регулярное выражение. К счастью, это регулярное выражение уже написано для вас.

См. Как извлечь плавающее число из строки и регулярное выражение для сопоставления чисел с запятыми или десятичными знаками в тексте

  • Как Python regex игнорировать регистр внутри части шаблона, но не всего выражения?
  • Замена текста с использованием регулярного выражения в Python с именованными параметрами
  • Regex соответствует буквам, цифрам и некоторым определенным символам?
  • Формат номерного номера с определенной маской regex python
  • Существует ли эквивалент Python для модификатора Perl «/ x» для регулярных выражений?
  • Регулярное соответствие для специальных элементов списка II
  • python mongodb regex: игнорировать регистр
  • Поиск в HTML-странице с использованием шаблонов Regex с помощью python
  • Python - лучший язык программирования в мире.