python - 如何在没有python解释的情况下捕获二进制字符串中的所有字符

标签 python regex struct

下面是我重现问题的方法:

创建一个名为“temp.log”的日志文件并将此行粘贴到其中

DEBUG: packetReceived '\x61\x62\x63'

我想要一个脚本,它将从日志文件中读取行并解码二进制字符串部分 ('\x61\x62\x63')。对于解码,我使用的是结构,所以:

struct.unpack('BBB', '\x61\x62\x63')

应该给我

(97, 98, 99)

这是我正在使用的脚本

import re
import struct
import sys

f = open(sys.argv[1], 'r')
for line in f:
    print line
    packet = re.compile(r"packetReceived \'(.*)\'").search(line).group(1)

    # packet is the string r'\x61\x62\x63'
    assert(len(packet), 12)

    # this works ok (returns (97, 98, 99))
    struct.unpack('BBB', '\x61\x62\x63')

    # this fails because packet is interpreted as r'\\x61\\x62\x63'
    struct.unpack('BBB', packet)

我使用 temp.log 作为脚本的参数运行脚本。

希望评论能突出我的问题。我怎样才能让变量包被解释为 '\x61\x62\x63' ??

旁白:在第一次编辑这个问题时,我假设从文件中读取行与此相同: line = "DEBUG: packetReceived '\x61\x62\x63'" 这使得 packet == 'abc'

但是实际上和这个一样(使用rawstring) line = r"DEBUG: packetReceived '\x61\x62\x63'"

最佳答案

Python 不会解释您传递给正则表达式的字符串。当您定义变量 line 时,转义序列很可能在较早的时候被解释。这可以正常工作,例如:

line = r"DEBUG: packetReceived '\x61\x62\x63'"
print re.compile(r"packetReceived '(.*)'").search(line).group(1)

它打印\x61\x62\x63

关于python - 如何在没有python解释的情况下捕获二进制字符串中的所有字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6277762/

相关文章:

Python - 如何使用 PySAL 计算交互式空间自相关 (Moran I)?

python - 使用具有混合类型列的 rpy2 将 pandas df 转换为 R data.frame

javascript - 字符串匹配和不匹配的正则表达式问题

javascript - 似乎正确的正则表达式在替换功能中不起作用

java - 在驱动器号后添加冒号到文件路径(即 : change/c/or c/to c:/) in Java

python - 如何基于相同的日期时间 x 轴同时绘制两个不同的数据框列

Python:通过交替包含来自其他两个行的行来创建单个数据框

将结构转换为 C 中的 char* 指针

C# - 取消绑定(bind)结构 "destruction"上的事件

arrays - 由于 char** 写入文件而导致核心转储