我需要从这个字符串中提取信息(是字节,但我解码了它):
\ x00 \ x00 \ x00!广播“updatedirection 126.0”
我需要查看它是否包含广播,更新方向,并且还会看到最后的数字是什么。我的第一个解决方案是:
data = data.split('!')
data = data[1]
但该位置的符号似乎随机变化,根本没有明显的模式。然后我试了一下:
data = data[12:]
但是字符串长度一直在变化,所以这不起作用。
我正在为学校的计算机科学项目做这个,我正在使用BYOB(基于Scratch,一种教会年轻人如何编程的简单语言)和套接字来在它们之间发送数据以制作LAN多人游戏。这实际上是唯一不起作用的东西。
希望有人能给我一个解决方案来找到这些数据。
答案 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。