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를 게시하지 않았습니다.
감사합니다.
바이트 113이'\ n'과 동등한 가능성이 있습니다 (2 진수에서는 10, 16 진수에서는 0a). 정규 표현식에're.DOTALL' 플래그를 추가하십시오. –
아! 그것은! 0x0A입니다. 그래서 RegEx는 라인을 평가하는 것입니다. 나는 'b'접두어를 사용하는 것이 바이트라고 말할 것이라고 생각했습니다. 이 문제를 해결하기위한 스위치가 있다고 생각 해요? – Bridgey
이진 데이터를 처리하는 경우 정규 표현식 대신 [struct] (http://docs.python.org/2/library/struct.html) 모듈을 사용하십시오. –