2016-05-15 17 views
1

文字列の内部に配置された 'ランダム' の情報を取得する(バイトでしたが、私はそれをデコード):!私は、この文字列から情報を抽出する必要が

\ X00 \ X00 \ X00放送 "updatedirection 126.0"

私はそれにブロードキャスト、更新方向が含まれているかどうかを調べる必要があります。私の最初の解決策は以下の通りであった。

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

が、その位置のシンボルがランダムとまったく明白なパターンで変えたようでした。それから私は試しました:

data = data[12:] 

しかし、文字列の長さは常に変更されていますが、これはうまくいきませんでした。

私はBYOB(スクラッチ、若者にプログラミング方法を教える簡単な言語に基づいています)とソケットを使ってLANマルチプレーヤーを作るためのデータを送信する学校のコンピューターサイエンスプロジェクトでこれを行います。これは、文字通りまだ動作しない唯一のものです。

誰かが私にこのデータを見つけるための解決策を教えてくれることを願っています。

+1

正規表現を使用してください。 –

+0

'import re'' print re.findall( '!ブロードキャスト' updated direction [\ d。] + "'、INPUT)' – YOU

答えて

1

文字列が含まれている単語かどうかを確認するために:

if word in string: 

それから私は、最後のスペースがどこにあるかを見つけるためにrfind()を使用して、このスペースの後にテキストを抽出し、それが数値であるかどうかをチェックしますが。

あなたは、単一の文で両方の単語をテストすることができます

str = "test it here" 

if "test" in str and "here" in str: 
    print("they are") 
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を参照してください。

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 
あなたは与えるようなものに正規表現のNULLバイトのための最初の部分を変更することで、それはより堅牢にでき

それは範囲(?:\x00){m,n}または同様のものです。

関連する問題