2012-05-11 2 views
7

많은 utf-8 텍스트 행을 포함하는 파일이 있습니다. 아래에 의해,에 의해, 그것은 중국어입니다.utf8 문제가있는 파이썬 정규 표현

PROCESS:类型:关爱积分[NOTIFY] 交易号:2012022900000109 订单号:W12022910079166 交易金额:0.01元 交易状态:true 2012-2-29 10:13:08 

파일 자체가 utf-8 형식으로 저장되었습니다. 파일 이름은

여기 내 파이썬 코드가 xx.txt, ENV는 python2.7

#coding: utf-8 
import re 
pattern = re.compile(r'交易金额:(\d+)元') 
for line in open('xx.txt'): 
    match = pattern.match(line.decode('utf-8')) 
    if match: 
     print match.group() 

여기에 문제가있는 것은 내가 아무 결과도 얻지 임.

交易金额:0.01元에서 십진수 문자열을 얻으려면 0.01입니다.

왜이 코드가 작동하지 않습니까? 아무도 나에게 그것을 설명 할 수 있을까? 나는 전혀 모른다.

답변

17

코드에 몇 가지 문제가 있습니다. 먼저 re.compile(ur'<unicode string>')을 사용해야합니다. 또한 re.UNICODE 플래그를 추가하는 것이 좋습니다 (정말로 필요한 경우 확실하지 않음). 다음은 \d+이 일련의 숫자 만 처리하지 않으므로 \d+\.?\d+ (숫자, 아마 점과 숫자를 사용해야 함)을 사용해야합니다. 예제 코드 :

#coding: utf-8 

text = u"PROCESS:类型:关爱积分[NOTIFY] 交易号:2012022900000109 订单号:W12022910079166 交易金额:0.01元 交易状态:true 2012-2-29 10:13:08" 
import re 
pattern = re.compile(ur'交易金额:(\d+\.?\d+)元', re.UNICODE) 

print pattern.search(text).group(1) 
+0

감사합니다. 매우 감사합니다. – castiel

+2

re.UNICODe가 나를 위해 일했습니다! – Parham

3

.match()^으로 정규식을 시작하는 것과 같습니다. 즉, 문자열 시작 부분 만 확인합니다.

+1

여전히 작동하지 않습니다. u는이 작은 작업을 수행하기 위해 코드를 제공 할 수 있습니다. 많은 것을 감사드립니다. – castiel

0

당신이 UTF-8을 사용하는 경우,이 플래그를 사용할 수 = re.LOCALE

#coding: utf-8 
import re 
pattern = re.compile(r'交易金额:(\d+\.?\d+)元', flags=re.LOCALE) 
for line in open('xx.txt'): 
    match = pattern.match(line) 

자세한 내용은 re.LOCALE를 참조하십시오. utf-8을 유니 코드로 변환 할 필요가 없습니다.