2013-11-14 1 views
0

파일 크기가 인 what.dmp입니다. 길이는 116 바이트입니다. 그리고 내 파이썬 코드는 다음과 같습니다 :이 코드를 실행왜 파이썬 정규식은 112 바이트를 초과하여 일치하지 않는 것 같습니다?

import binascii 
import re 
import sys 

print(sys.version) 

needle = re.compile(b".{112}") 

with open("what.dmp", "rb") as haystack: 
    chunk = haystack.read() 
    print("Read {0} bytes.".format(len(chunk))) 
    matches = needle.search(chunk) 
    if matches: 
    print(matches.start()) 
    print(binascii.hexlify(matches.group(0))) 
    else: 
    print("No matches found.") 

괜찮 :

C:\test>C:\Python33\python.exe test.py 
3.3.2 (v3.3.2:d047928ae3f6, May 16 2013, 00:06:53) [MSC v.1600 64 bit (AMD64)] 
Read 116 bytes. 
0 
b'0101060001010600087e88758f4e8e75534589751df7897583548775e4bcf001e6d0f001cae3f001ccf7f0010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000090d91300000000002c003100eb6fb024' 

그러나, 112 (113)에 정규 표현식 변경 : 없음

needle = re.compile(b".{113}") 

그리고 일치를 발견 :

C:\test>C:\Python33\python.exe test.py 
3.3.2 (v3.3.2:d047928ae3f6, May 16 2013, 00:06:53) [MSC v.1600 64 bit (AMD64)] 
Read 116 bytes. 
No matches found. 

질문은 왜 정규 표현식이 113 번째 문자와 일치하지 않는지입니다. 분명히 내용이 부적절하기 때문에 what.dmp를 게시하지 않았습니다.

감사합니다.

+2

바이트 113이'\ n'과 동등한 가능성이 있습니다 (2 진수에서는 10, 16 진수에서는 0a). 정규 표현식에're.DOTALL' 플래그를 추가하십시오. –

+0

아! 그것은! 0x0A입니다. 그래서 RegEx는 라인을 평가하는 것입니다. 나는 'b'접두어를 사용하는 것이 바이트라고 말할 것이라고 생각했습니다. 이 문제를 해결하기위한 스위치가 있다고 생각 해요? – Bridgey

+1

이진 데이터를 처리하는 경우 정규 표현식 대신 [struct] (http://docs.python.org/2/library/struct.html) 모듈을 사용하십시오. –

답변

2

바이트 113이 \n (10 진수에서는 10, 16 진수에서는 0)과 같을 가능성이 매우 높습니다. re.DOTALL 플래그를 정규식에 추가하십시오.

그러나 주석에서 언급했듯이 정규 표현식이 필요하지 않을 수도 있습니다.

관련 문제