Я пытаюсь найти позиции шаблонов в файле, и я использую Python регулярное выражение. Когда я запускаю приведенный ниже код, печатаются несколько начальных позиций, но печатается только одна конечная позиция, соответствующая последней начальной позиции. Нижний оператор печати также печатается только один раз. Почему нет значения match.end()
для каждого значения match.start()
? Файл представляет собой файл .obj.
import re
import binascii
def findByte(b,file):
f = open(file, "rb").read()
f = binascii.hexlify(f)
regex = b + "(?=(?:[\\da-fA-F]{2})*$)"
for match in (re.finditer(regex, f)):
s = match.start()
print("S" + str(s))
e = match.end()
print("E" + str(e))
g = match.group()
print(g)
print ('String match "%s" at %d:%d' % (g, s, e))
findByte("ca","demo.obj")
Когда я запускаю его, печатаются следующие ответы.
S0
S64
S184
S252
E254
ca
String match "ca" at 252:254
Если я вместо этого пишу
def findByte(b,file):
f = open(file, "rb").read()
f = binascii.hexlify(f)
regex = b + "(?=(?:[\\da-fA-F]{2})*$)"
m = re.findall(regex,f)
print(m)
findByte("ca","demo.obj")
печатное значение
['ca', 'ca', 'ca', 'ca']