加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

Perl在分隔符之前/之后用空文本分割

发布时间:2020-12-15 21:19:42 所属栏目:大数据 来源:网络整理
导读:我注意到Perl的拆分命令有些好奇的行为,特别是在我期望结果数组包含空字符串的情况下,但实际上没有。 例如,如果我在字符串的末尾(或开头)有一个分隔符,则生成的数组不会有一个空字符串”作为最后一个(或第一个)元素。 例: @s = split(/x/,'axb') 产生2
我注意到Perl的拆分命令有些好奇的行为,特别是在我期望结果数组包含空字符串的情况下,但实际上没有。

例如,如果我在字符串的末尾(或开头)有一个分隔符,则生成的数组不会有一个空字符串”作为最后一个(或第一个)元素。

例:

@s = split(/x/,'axb')

产生2个元素数组[‘a’,’b’]

@s = split(/x/,'axbx')

产生相同的数组

@s = split(/x/,'axbxxxx')

产生相同的数组

但是,一旦我把东西放在最后,所有这些空字符串就会显示为元素:

@s = split(/x/,'axbxxxxc')

产生一个6元素数组[‘a’,’b’,”,”,”,’c’]

如果分隔符处于开头,则行为相似。

我会期望在分隔符之间,之前或之后的空文本总是在分割中生成元素。任何人都可以向我解释为什么分裂在Perl中如此行事?我只是在Python中尝试过同样的事情,并且按预期工作。

注意:Perl v5.8

解决方法

从 the documentation:

By default,empty leading fields are preserved,and empty trailing ones are deleted. (If all fields are empty,they are considered to be trailing.)

这就解释了你看到的跟踪字段的行为。这通常是有道理的,因为例如人们往往非常粗心地拖尾空白。但是,如果需要,您可以获得尾随的空白字段:

split /PATTERN/,EXPR,LIMIT

If LIMIT is negative,it is treated as if an arbitrarily large LIMIT had been specified.

所以要得到所有尾随的空字段:

@s = split(/x/,'axbxxxxc',-1);

(我假设你在看着领先的空字段时犯了一个粗心大意的错误 – 它们绝对保留下来,尝试拆分(/ x /,’xaxbxxxx’),结果大小为3)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读