2011-08-18 4 views
1

왜 파이썬에서 공백으로 구분 된 부동 소수점 목록을 구문 분석하는 것이 가장 좋습니까?Python에서 부동 소수점 목록을 구문 분석하기위한 정규식

string = " 4 1.6 8.29 0 0 3.55e-15 -1.28e-13 " 

을 숫자를 분리 공백의 알 수없는 번호 및 문자열의 beggining 또는 끝에 :

나는 소스에서 나올 것입니다 이런 종류의 행이.

일반적으로 숫자 사이에 공백이 하나만있을 수 있고 문자열의 시작이나 끝에 공백이 없도록 보장 할 수있는 경우에만 numbers = map(float, string.split(" "))을 사용했습니다. 나는 정규 표현식에 능숙하지는 않지만 누군가가 re.split("\s+", string)을 사용하라고 제안했지만 때로는 빈 문자열이 결과 목록을 얻었 기 때문에 작동하지 않는다.

저는 지금 사용하고 있습니다 : re.split("\s+")하지만 때로는 결과 목록이 빈 문자열로 표시되기 때문에 작동하지 않습니다. 어떻게 든 노력하고 있습니다

res = map(float, re.findall("\d+\S*\d*", string) 

을하지만, 나에게 깨지기 쉬운 추한 외모 :

지금 사용하고 있습니다. 숫자를 생성하지 못하는 많은 문자열과 일치 할 수 있습니다.

re.findall(patt, string)을 사용하고 숫자 목록을 안전하게 복구 할 수 있도록 항상 정수 및 부동 소수점 숫자와 일치하는 최상의 정규 표현식 패턴은 무엇입니까?

답변

11

정규식이 필요하지 않습니다. 단순히 인수없이 string.split()을 사용하십시오. 그것은 공백의 어떤 양으로 나눌 것입니다.

2

지능형리스트와 str.split() 방법의 사용 예 - map보다 약간 더 파이썬을 명확하고 IMHO :

>>> string = " 4 1.6 8.29 0 0 3.55e-15 -1.28e-13 " 
>>> floats = [float(x) for x in string.split()] 
>>> floats 
[4.0, 1.6000000000000001, 8.2899999999999991, 0.0, 0.0, 3.5500000000000001e-15, 
-1.2800000000000001e-13]