복붙노트

[PYTHON] utf8 문제가있는 파이썬 정규식

PYTHON

utf8 문제가있는 파이썬 정규식

나는 일반 utf-8 텍스트의 많은 줄을 포함하는 파일을 가지고있다. 아래에 의해,에 의해, 그것은 중국어입니다.

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()

여기서 문제가되는 것은 결과가 없다는 것입니다.

交配 金額에서 10 진수 문자열을 얻고 싶습니다. 여기에는 0.01입니다. 0.01입니다.

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

해결법

  1. ==============================

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

    코드에 몇 가지 문제가 있습니다. 먼저 re.compile (ur '<유니 코드 문자열>')을 사용해야합니다. 또한 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)
    
  2. ==============================

    2..match ()는 ^로 정규 표현식을 시작하는 것과 비슷하기 때문에 .search ()를 사용해야합니다. 즉, 문자열 시작 부분 만 검사합니다.

    .match ()는 ^로 정규 표현식을 시작하는 것과 비슷하기 때문에 .search ()를 사용해야합니다. 즉, 문자열 시작 부분 만 검사합니다.

  3. ==============================

    3.utf-8을 사용하는 경우 flags = re.LOCALE을 사용할 수 있습니다.

    utf-8을 사용하는 경우 flags = 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을 유니 코드로 변환 할 필요가 없습니다.

  4. from https://stackoverflow.com/questions/10546442/python-regular-expression-with-utf8-issue by cc-by-sa and MIT license