一个小问题:把八个字符两两分开。

fibbery 2011-10-28 10:17:15
有一个字符串,例如十六进制数字:4EA11802
能否使用split函数两位两位的拆分开?拆分成:4E,A1,18,02。

多分酬谢哦!
...全文
247 21 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
jlfzhz 2011-11-03
  • 打赏
  • 举报
回复
正则表达式实现,个人认为才是王道。
imeuyniy 2011-11-01
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 ccdbg 的回复:]

Perl code

#!/usr/bin/perl -w
use strict;
print "$_\n" for grep{$_}split /(..)/,'ABCDEFGH';
[/Quote]

学习学习!!!
imeuyniy 2011-10-31
  • 打赏
  • 举报
回复
用push+re很容易,
perl -le '$str="4EA11802"; while($str=~/../g){push @array,$&};print $_ foreach @array'        
4E
A1
18
02

非要用split:
perl -le '$str="4EA11802"; map{push @array,(split //,$str)[2*$_].(split //,$str)[2*$_+1]} (0..length($str)/2-1);print $_ foreach @array'
4E
A1
18
02
ccdbg 2011-10-31
  • 打赏
  • 举报
回复

#!/usr/bin/perl -w
use strict;
print "$_\n" for grep{$_}split /(..)/,'ABCDEFGH';
SChivas 2011-10-31
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 qaz703016035 的回复:]
引用 7 楼 panzifei 的回复:
引用 6 楼 jacksonlv 的回复:
引用 4 楼 kevinhe0472 的回复:
Python code

s = '4EA11802'
list = [ s[i:i+2] for i in range(0,len(s),2) ]

人家要的是使用split()函数的:
Python code

#coding=utf-8
……
[/Quote]

晕,写错个东西:

def slpitc(s,count):
return [s[i:i+2] for i in range(0,len(s),count)]
SChivas 2011-10-31
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 panzifei 的回复:]
引用 6 楼 jacksonlv 的回复:
引用 4 楼 kevinhe0472 的回复:
Python code

s = '4EA11802'
list = [ s[i:i+2] for i in range(0,len(s),2) ]

人家要的是使用split()函数的:
Python code

#coding=utf-8
s = '4EA11802'
slist……
[/Quote]

大虾,从效率来说

def splitCount(s, count):
return [''.join(x) for x in zip(*[list(s[z::count]) for z in range(count)])]

应该比

def slpitc(s,count):
return [s[i:i+2] for i in range(0,len(s),c)]

要慢吧?数据一大的话不知道切片是不是也会慢。。。

fibbery 2011-10-31
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 iambic 的回复:]
没看到有简单的split的方法。
[/Quote]

是的,我问得不好,限制大家的思路了!:)
witwolf 2011-10-30
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 iambic 的回复:]

Perl code
@x = '4EA11802' =~ /../g;

没看到有简单的split的方法。
[/Quote]
iambic 2011-10-30
  • 打赏
  • 举报
回复
@x = '4EA11802' =~ /../g;

没看到有简单的split的方法。
ccdbg 2011-10-30
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 fibbery 的回复:]

有用perl实现的吗?都可以,都有分哦!
[/Quote]

perl -e 'print "$1\n" while("4EA11802"=~/(\w{2})/g)'
proorck6 2011-10-30
  • 打赏
  • 举报
回复
@result = split /[0-9a-f]{2}/,$str;

可能还有点问题,抛砖引玉了。

lufubing 2011-10-28
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 kevinhe0472 的回复:]


s = '4EA11802'
list = [ s[i:i+2] for i in range(0,len(s),2) ]
[/Quote]
这个方法不错!
老咖啡LF 2011-10-28
  • 打赏
  • 举报
回复

s = '4EA11802'
list = [ s[i:i+2] for i in range(0,len(s),2) ]
老咖啡LF 2011-10-28
  • 打赏
  • 举报
回复

s = '4EA11802'
list = [ s[i:i+2] for i in range(0,len(s),2) ]
panzifei 2011-10-28
  • 打赏
  • 举报
回复

>>> def splitCount(s, count):
... return [''.join(x) for x in zip(*[list(s[z::count]) for z in range(count)])]
...
>>> c
'4EA11802'
>>> splitCount(c,2)
['4E', 'A1', '18', '02']
>>> def split_len(seq, length):
... return [seq[i:i+length] for i in range(0, len(seq), length)]
...
>>> split_len(c,2)
['4E', 'A1', '18', '02']
>>> def chunks(l,n):
... for i in xrange(0,len(l),n):
... yield l[i:i+n]
...
>>> list(chunks(c,2))
['4E', 'A1', '18', '02']
panzifei 2011-10-28
  • 打赏
  • 举报
回复
reference上没看到split有这功能吧?
网上倒找到几个方法,估计你也都google过了吧


def splitCount(s, count):
return [''.join(x) for x in zip(*[list(s[z::count]) for z in range(count)])]

c
'4EA11802'
splitCount(c,2)
['4E', 'A1', '18', '02']
def split_len(seq, length):
return [seq[i:i+length] for i in range(0, len(seq), length)]

split_len(c,2)
['4E', 'A1', '18', '02']
def chunks(l,n):
for i in xrange(0,len(l),n):
yield l[i:i+n]

list(chunks(c,2))
['4E', 'A1', '18', '02']
wxgiter 2011-10-28
  • 打赏
  • 举报
回复
为什么非要用split函数啊?

my $str = "4EA11802";
my @list;
my $i = 0;
for($i=0; $i<length($str); $i+=2)
{
push(@list, substr($str, $i, 2));
}
foreach(@list)
{
print;
print "\n";
}
fibbery 2011-10-28
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 panzifei 的回复:]

先用逗号连接起来,再用逗号拆分。吃饱了没事干?这不是明显多了两步无用功

楼主都有05年这个板块的勋章了,应该是在找个高效的实现,估计数据量很大。
[/Quote]

尺有所长,寸有所短。我也不见得什么都会!懒人总是想找到最简单的方法:)

也给大家散点分嘛!:)
fibbery 2011-10-28
  • 打赏
  • 举报
回复
有用perl实现的吗?都可以,都有分哦!
panzifei 2011-10-28
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 jacksonlv 的回复:]
引用 4 楼 kevinhe0472 的回复:
Python code

s = '4EA11802'
list = [ s[i:i+2] for i in range(0,len(s),2) ]

人家要的是使用split()函数的:
Python code

#coding=utf-8
s = '4EA11802'
slist = []
for i in range(0……
[/Quote]


先用逗号连接起来,再用逗号拆分。吃饱了没事干?这不是明显多了两步无用功

楼主都有05年这个板块的勋章了,应该是在找个高效的实现,估计数据量很大。
加载更多回复(1)

37,743

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • WuKongSecurity@BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧