将信息“随机”放置在字符串中

时间:2016-05-15 12:55:35

标签: python python-3.x

我需要从这个字符串中提取信息(是字节,但我解码了它):

\ x00 \ x00 \ x00!广播“updatedirection 126.0”

我需要查看它是否包含广播,更新方向,并且还会看到最后的数字是什么。我的第一个解决方案是:

data = data.split('!')
data = data[1]

但该位置的符号似乎随机变化,根本没有明显的模式。然后我试了一下:

data = data[12:]

但是字符串长度一直在变化,所以这不起作用。

我正在为学校的计算机科学项目做这个,我正在使用BYOB(基于Scratch,一种教会年轻人如何编程的简单语言)和套接字来在它们之间发送数据以制作LAN多人游戏。这实际上是唯一不起作用的东西。

希望有人能给我一个解决方案来找到这些数据。

3 个答案:

答案 0 :(得分:2)

你可以用锤子打它

import re

s = '\x00\x00\x00!broadcast "updatedirection 126.0"'
pat = re.compile(r'(?:\x00){3}\Wbroadcast "updatedirection ([\d.]+)"')
m = pat.match(s)
if m:
    print(m.group(1)) # '126.0'

检查不同的情况,

s = '\x00\x00\x00#broadcast "updatedirection 126.0"'
pat.match(s).group(1) # '126.0'

s = '\x00\x00\x00!foo "bar 126.0"'
pat.match(s) # None

你可以通过将正则表达式的空字节的第一部分更改为给它一个范围(?:\x00){m,n}或类似的东西来使其更强大。

答案 1 :(得分:1)

检查字符串是否包含单词:

if word in string:

然后我会使用rfind()查找最后一个空格的位置,在此空格后提取文本并检查它是否为数字。

您可以在一个语句中测试这两个单词:

str = "test it here"

if "test" in str and "here" in str:
    print("they are")

答案 2 :(得分:0)

试试这个,

import re

s = '\x00\x00\x00!broadcast "updatedirection 126.0"'

# if 'broadcast' in s  and 'updatedirection' in s:
if all([item in s for item in ['broadcast', 'updatedirection']]):
    result = re.findall('[-+]?\d*\.\d+|\d+', s)  # extract all numbers from a string

    print(result[-1]) # the last number
    # Output
    126.0

请参阅re.findall