Python:从字符串组

时间:2015-08-01 07:26:06

标签: python arrays string list

我正在使用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

由于

1 个答案:

答案 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字面匹配0d0a7878
  • 0d0a匹配任何字符。
  • .匹配0个或更多个(。)字符(greedy)。追加.*将使比赛变得非贪婪。