2013-08-11 9 views
2

저는 파이썬에서 진정한 초보자입니다.하지만 문자열 조작이 쉬워야한다고 들었습니다. 당신은 어떻게 그렇게 말해 줄 수 : 내가 함수에 대한 매개 변수로 사용하지 못할 수 있도록 해당 문자열에서 두 개의 부동 소수점 숫자를 추출하고 싶습니다정규식을 사용하여 문자열에서 플로트 추출

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

정말 작동합니까? 'findall'의 결과로'[ '= 1024', '.0', '= 768', '.0'] '를 얻었습니다. – alecxe

관련 문제