【问题标题】:Python find messages inside a string mixed of ascii and hexPython 在混合了 ascii 和 hex 的字符串中查找消息
【发布时间】:2017-11-02 12:53:42
【问题描述】:

我尝试在由 ascii 混合而成的字符串中查找消息,格式如下:

"212zp*    ���                �91238902Pressure_1,9472,Pressure_2,4251,is_usb: {0}478212zp+    ���                �91238902Pressure_1,9472,Pressure_2,4251,is_usb: {0}478212zp,    ���                �91238902Pressure_1,9472,Pressure_2,4251,is_usb: {0}478212zp-    ���               "

我需要同时解码 hex 和 ascii 消息。消息在91238902478212 之间

我怎样才能做到这一点?该字符串是动态的,可以包含未定义数量的消息,并且标头 91238902478212 中可能会出现错误

【问题讨论】:

    标签: python hex ascii


    【解决方案1】:

    这似乎是正则表达式的完美使用。这是pythex的链接:

    import re
    x = "212zp*91238902Pressure_1,9472,Pressure_2,4251,is_usb:{0}478212zp+91238902Pressure_1,9472,Pressure_2,4251,is_usb: {0}478212zp,91238902Pressure_1,9472,Pressure_2,4251,is_usb: {0}478212zp-"
    
    # will grab between 91238902 and 478212
    # alternative regex is: (?<=91238902).*?(?=478212)
    result = re.findall(r'91238902(.*?)478212', x)
    

    输出是一个列表:

    ['Pressure_1,9472,Pressure_2,4251,is_usb:{0}', 'Pressure_1,9472,Pressure_2,4251,is_usb: {0}', 'Pressure_1,9472,Pressure_2,4251,is_usb: {0}']
    

    【讨论】:

    • 谢谢,完美。如何从使用 .findall 读取的字符串中删除消息?
    • @HansPeterLoft,我很高兴!如果这已经回答了您的问题,请将此答案标记为已接受(仅在已回答时)。你能解释一下"erase messages you read"的意思吗?
    • 我从中读取数据的字符串是串行端口,我将读取的所有数据附加到示例中的字符串 x 中。由于在我检查消息时数据可能只到达一半,所以我不能在读出消息后丢弃 x,但我想删除我已经阅读的 x 中的消息。
    • 我会尝试提出一些not in 逻辑。如果您附加到您已阅读的消息列表,您可以比较这两个列表。 [这个问题] (stackoverflow.com/questions/2104305/…) 举个例子。在伪代码中,它将是 if thing in one list is in the other- pass. Else - Read
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-01
    • 1970-01-01
    • 2013-09-26
    相关资源
    最近更新 更多