2013-08-11 4 views
2

Я настоящий новичок в python, но я слышал, что это должно быть легко в строковых манипуляциях. Можете ли вы сказать мне, как это сделать:Извлечь поплавки из строки, используя регулярное выражение

У меня есть строка:

str = "[someString xpos=1024.0 ypos=768.0 someotherString]" 

я хотел бы, чтобы извлечь два числа с плавающей точкой из этой строки, так что я не могу использовать их в качестве параметров для функции.

Есть ли простой способ, как я могу это сделать? На мой взгляд, это выглядит следующим образом:

*xpos=____.__*ypos=____.___* 

где:

*: Any char 

_: float number, maybe with variable lenght 

(? К сожалению мой английский очень плохо, есть руководство на немецком языке для регулярного выражения)

рассматривает

+0

вы можете принять один из ответов, если вы нашли их достаточно хорошо для ваших нужд! –

+1

Спасибо, что помогли мне! – beginner

ответ

1
>>> import re 
>>> s = "[someString xpos=1024.0 ypos=768.0 someotherString]" 
>>> results = re.findall('pos=([\d.]+)', s) 
>>> results 
['1024.0', '768.0'] 
>>> map(float, results) 
[1024.0, 768.0] 
+0

Давайте также сопоставляем все последовательные точки '...'! – HamZa

+1

Ну, правда, но, как правило, выражение зависит от того, какой тип ввода/текста есть. – alecxe

3

Это простое регулярное выражение для нахождения чисел с плавающей запятой.

/[-+]?[0-9]*\.?[0-9]+/ 

Demo

+0

Это не JS, вы можете удалить модификатор 'g' – HamZa

0

Вы можете использовать модуль повторно.

import re 

matchobject = re.search(string, "[.+xpos=(.+)\sypos=(.+)\s.+]") 
xpos = matchobject.group(1) 
ypos = matchobject.group(2) 

здесь '. +' Означает любой набор символов переменной длины, пока вы не достигнете следующего указанного шаблона. Скобки используются для группировки значений xpos и ypos, чтобы вы могли их извлечь позже.

он вернет xpos и ypos в виде строк, вы можете преобразовать их в float или int.

xpos = int(xpos) 
ypos = float(ypos) 
5

Это одна будет работать в случае, если ваш xpos или ypos отрицательны:

x, y = map(float, re.findall(r'[+-]?[0-9.]+', str)) 
+1

'? 'Вместо' * 'будет лучше. – HamZa

+1

спасибо! Я обновил ответ! Также добавлен второй '?', Если строка имеет что-то вроде '.5' ... –

+0

Действительно ли это работает? Я получаю '['= 1024', '.0', '= 768', '.0']' в результате 'findall'. – alecxe

Смежные вопросы