0

116 バイトの長さのファイルwhat.dmpがあります。そして私のpythonコードは次のようになります:

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 は掲載していません。

どうもありがとう!

4

1 に答える 1

2

\nバイト 113 が, (2 進数では 10、16 進数では 0a) に相当する可能性が非常に高いです。re.DOTALL フラグを正規表現に追加してみてください。

ただし、コメントに記載されているように、これにはおそらく正規表現は必要ありません。

于 2013-11-15T00:08:33.203 に答える