我正在使用GPS追踪器。跟踪器发送一些数据包。每个数据包以起始位(7878)和停止位(0d0a)开始。有时我会收到一组数据包。我想分开那些数据包。我使用下面的代码来分割两个字符。
data='78780a1301000400020017e73c0d0a787825260f071a0b050ac70165eaf0089b626021052e09019428139100fa7108000403020004a4810d0a78780a1301000409020016e73c0d0a'
splt_data= [data[i:i+2] for i in range(0, len(data), 2)]
我想要下面
78780a1301000400020017e73c0d0a
787825260f071a0b050ac70165eaf0089b626021052e09019428139100fa7108000403020004a4810d0a
78780a1301000409020016e73c0d0a
如果“0a或0d或78或”不在起始位和停止位之间,我可以分割这些数据包。如果有可能获得起始位或停止位本身如何分离它。例如,下面是一个数据包,其中包含起始位(7878)和停止位(0d0a)之间的“0a”。
7878ka130100**0a**00020017e73c0d0a
由于
答案 0 :(得分:2)
您可以使用正则表达式。 re.findall
将返回与模式匹配的所有匹配项:
my $cgi = CGI->new;
my $json = JSON->new->utf8;
my $header_type = "application/json";
my $header_status = "200";
my $output = $json->encode({
"error" => "2000",
"description" => "an action header is required",
});
print $cgi->header(
-type => $header_type,
-charset => "utf-8",
-status => $header_status
);
print $output;
print "\n";
>>> data = '78780a1301000400020017e73c0d0a787825260f071a0b050ac70165eaf0089b626021052e09019428139100fa7108000403020004a4810d0a78780a1301000409020016e73c0d0a'
>>> import re
>>> re.findall('7878.*?0d0a', data)
['78780a1301000400020017e73c0d0a',
'787825260f071a0b050ac70165eaf0089b626021052e09019428139100fa7108000403020004a4810d0a',
'78780a1301000409020016e73c0d0a']
,7878
字面匹配0d0a
,7878
。0d0a
匹配任何字符。.
匹配0个或更多个(。)字符(greedy)。追加.*
将使比赛变得非贪婪。