galaxy001
[已解决][求助]如何做如下字串切分?
对“abc;efg;ddd; fdd",要切为"abc", "efg", "ddd; fdd"
即以";"切开,但遇到"; "的不切。应该如何写?
[[i] 本帖最后由 galaxy001 于 2008-6-30 10:02 编辑 [/i]]
galaxy001
如果要像split那样返回数组,有简便些的办法吗?
感觉一个个push看起来不太舒服。
我暂时是这样解决的:
[code]my $groups='ID=12002.t00840;Name=CSLA1 - cellulose synthase-like family A; mannan synthase, expressed';
# patch for TIGR GFF3
$groups=~ s/; /@@@@@/g;
$groups=~ s/, /#####/g;
my @groups = split(//s*;/s*/, $groups);
for my $group (@groups) {
my ($tag,$value) = split /=/,$group;
$tag = unescape($tag);
my @values = map {unescape($_)} split /,/,$value;
for my $v ( @values ) {
$v=~s/@@@@@/; /g; # patch for TIGR GFF3
$v=~s/#####/, /g; # patch for TIGR GFF3
$feat->add_tag_value($tag,$v);
}
}
[/code]
[[i] 本帖最后由 galaxy001 于 2008-6-29 16:32 编辑 [/i]]
MMMIX
[quote]原帖由 [i]galaxy001[/i] 于 2008-6-29 16:22 发表 [url=http://bbs.chinaunix.net/redirect.php?goto=findpost&pid=8696993&ptid=1183781][img]http://bbs.chinaunix.net/images/common/back.gif[/img][/url]
如果要像split那样返回数组,有简便些的办法吗?
[/quote]
有的,就用 split, 不过你得仔细研究下 regexp
flw
[quote]原帖由 [i]cobrawgl[/i] 于 2008-6-29 21:11 发表 [url=http://bbs.chinaunix.net/redirect.php?goto=findpost&pid=8698460&ptid=1183781][img]http://bbs.chinaunix.net/images/common/back.gif[/img][/url]
还没有看 大骆驼 的 正则式 部分,版主能不能给个例子啊。 [/quote]
[font=fixedsys][code]D:/MoChou>perl -ne "print if 1../__END__/" ttt.pl
my $str = "abc;efg;ddd; fdd";
my @list = split /;(?=/S)/, $str;
print "[$_]/n" foreach @list;
__END__
D:/MoChou>ttt
[abc]
[efg]
[ddd; fdd]
D:/MoChou>[/code][/font]
[[i] 本帖最后由 flw 于 2008-6-29 21:36 编辑 [/i]]
mouse.rice
[quote]原帖由 [i]flw[/i] 于 2008-6-29 21:33 发表 [url=http://bbs.chinaunix.net/redirect.php?goto=findpost&pid=8698576&ptid=1183781][img]http://bbs.chinaunix.net/images/common/back.gif[/img][/url]
D:/MoChou>perl -ne "print if 1../__END__/" ttt.pl
my $str = "abc;efg;ddd; fdd";
my @list = split /;(?=/S)/, $str;
print "[$_]/n" foreach @list;
__END__
D:/MoChou>ttt
[abc]
[efg]
[ddd; ... [/quote]
[color=Green][b]让老大给抢先了:mrgreen: 为了鼓励自己,我还是要把我的CODE贴出来,也算写个笔记,已备自己日后查阅![/b][/color]
[table=95%][tr][td][font=FixedSys][color=#000000][color=#0000FF]while[/color][color=#0000CC]([/color][color=#0000CC]<[/color]DATA[color=#0000CC]>[/color][color=#0000CC])[/color][color=#0000CC]{[/color]
[color=#0000FF]my[/color] [color=#0000FF]@[/color][color=#808000]list[/color] [color=#0000CC]=[/color] [color=#FF0000]split[/color] [color=#0000CC]/[/color][color=#0000CC]/[/color][color=#0000CC];[/color][color=#0000CC]([/color][color=#0000CC]?[/color][color=#0000CC]=[/color][color=#0000CC]/[/color]w[color=#0000CC])[/color][color=#0000CC]/[/color][color=#0000CC];[/color]
[color=#FF0000]print[/color] [color=#FF0000]join[/color] [color=#FF00FF]","[/color][color=#0000CC],[/color][color=#0000FF]@[/color][color=#808000]list[/color][color=#0000CC];[/color]
[color=#0000CC]}[/color]
[color=#0000FF]__END__[/color]
abc[color=#0000CC];[/color]efg[color=#0000CC];[/color]ddd[color=#0000CC];[/color] fdd[/color][/font][/td][/tr][/table]
[quote]D:/>perl -w tem.txt
abc,efg,ddd; fdd[/quote]
-----------[color=Green]其实2周前我也不知道有“环视”一说,是看了FLW老大前些天的回帖[color=Black](详见:如何提取介于某个区间的几行文字,区间的开始和结束可以用正则表达式描述)[/color]才去学习[/color][color=Red][b]?![/b][/color][color=SeaGreen]的用法,无心插柳柳成荫,把[/color][color=Red][b]?<=[color=SeaGreen]和[/color]?=[/b][/color][color=SeaGreen]也顺带看了,呵呵,真好![/color] [color=Sienna][b]希望坛子里的神仙们多多回帖,不懂的地方我们就多多查阅资料,直到弄明白,很好很强大:mrgreen:[/b][/color]
[[i] 本帖最后由 mouse.rice 于 2008-6-29 22:12 编辑 [/i]]