2011-01-19 4 views
0

루아에서이 줄의 숫자를 파싱하는 데 도움이 필요합니다.이 줄을 파싱하려면 정규식이 필요합니다. 58.21 -13.73 57 -1

58.21 -13.73 57 -1 

나는 현재 이것이다 : 그것은 마이너스를 반환하지 않고 소수점을 처리하지 않는 [1-9][0-9] 내가 아는 올바르지 않습니다.

감사합니다,

데이브

+3

어떤 언어를 사용하고 있습니까? – SilentGhost

+1

파싱의 의미는 무엇입니까? '. *'이이 줄과 일치합니다 ;-) –

+0

어떤 결과를 얻고 싶습니까? –

답변

2
s="58.21 -13.73 57 -1" 
for w in s:gmatch("%S+") do print(w) end 

이 패턴은 단어가 공백이 아닌 문자로 된 행에서 모든 단어를 추출합니다.

0

이것은 정규식을위한 일이 아니다. 다음은 파이썬에서의 간단한 구현입니다.

>>> s = '58.21 -13.73 57 -1' 
>>> [float(i) for i in s.split()] 
[58.21, -13.73, 57.0, -1.0] 

원칙은 일반적이지만 공간에 분할하고 필요한 경우 숫자 유형으로 변환합니다. 루아에서

+0

하지만 여분의'.0'을 정수에 추가했습니다. – ghostdog74

+1

@ghostdog : 너 진짜 니? 나는 OP를 수레로 변환했다. OP가 파싱을 통해 뭔가 다른 것을 의미한다면, 질문에 진술해야 할 필요가있다. – SilentGhost

0

:

(%-?%d+%.?%d+)%s+(%-?%d+%.?%d+)%s+(%-?%d+%.?%d+)%s+(%-?%d+%.?%d+) 

예 :

local a, b, c, d = ("58.21 -13.73 57 -1"):match(
    "(%-?%d+%.?%d*)%s+(%-?%d+%.?%d*)%s+(%-?%d+%.?%d*)%s+(%-?%d+%.?%d*)" 
) 
print(a, b, c, d) --> 58.21 -13.73 57 -1 

당신은 (또는하지 않을 수 있습니다) 숫자로 반환 값을 변환 할 수 있습니다.

0

"구문 분석"으로 가정하면 숫자와 일치하는 정규식이 필요합니다. 사용자가 제공 한 문자열에서는 일치되고 싶은 것 :

  • 58.21
  • -13.73
  • 57
  • -1

아마을 사용 패턴은 ([^ ]+)입니다. 그것은 당신의 문자열에서 (잠재적으로) 소수점과 부호를 가진 숫자가 될 공간을 제외하고는 무엇이든 찾을 수 있습니다.

관련 문제