2014-04-10 5 views
0

정상적으로 작동하는 것처럼 보이는 정규 표현식을 작성하려고했지만 리터럴 문자열 중 일부를 단어 패턴으로 바꿔야하고 이유를 이해하고자합니다.왜 파이썬 정규 표현식은 정규 표현식과 일치하지 않지만 w +는 무엇입니까?

import re 

text = " 1 p2  2.26347691E+12 optvl 9.05369210E+04 ctha  6.00000000E+01" 

p1 = re.compile(r"\s+(\d+)\s+p2\s+([\d\.\+\-E]+)\s+optv1\s+([\d\.\+\-E]+)\s+ctha\s+([\d\.\+\-E]+)") 
m1 = p1.findall(text) 
print m1 

p2 = re.compile(r"\s+(\d+)\s+p2\s+([\d\.\+\-E]+)\s+\w+\s+([\d\.\+\-E]+)\s+\w+\s+([\d\.\+\-E]+)") 
m2 = p2.findall(text) 
print m2 

여기 출력입니다 :

다음은 예입니다 어떤 통찰력에 대한

[] 
[('1', '2.26347691E+12', '9.05369210E+04', '6.00000000E+01')] 

감사합니다!

편집 : - 네, 그것은 오타의 단어 첫 번째 버전에 오타가 1

+1

'optvl' 대' optv1'. 오타가 있습니다. –

+0

@ g.d.d.c 확실하게이 경우에 이것은 주제 밖입니까? –

+0

감사! 그게 내가 최근에 다시 설치 한 후 더 나은 문자를 구별하는 무언가로 내 글꼴을 전환하지 않기 때문에 얻는 것입니다. – flutefreak7

답변

3

대 이전 l, l 대신 1해야한다 :

p1 = re.compile(r"\s+(\d+)\s+p2\s+([\d\.\+\-E]+)\s+optvl\s+([\d\.\+\-E]+)\s+ctha\s+([\d\.\+\-E]+)") 
                ^
+0

Drats! 나는 모든 것을 다시 설치해야했고, 소스 코드 프로를 다시 설치하지 않았지만 비슷한 문자를 구별하는 데 도움이되었습니다. 고마워요. 그것은 분명히 몇 분 더 받아 들일 수는 없지만, 조금 있습니다. – flutefreak7