我注意到Perl的split命令有一些奇怪的行为,特别是在我希望结果数组包含空字符串的情况下,但实际上并没有.
例如,如果我在字符串的结尾(或开头)有一个分隔符,则结果数组没有空字符串''作为最后一个(或第一个)元素.
例:
@s = split(/x/, 'axb')
Run Code Online (Sandbox Code Playgroud)
产生2个元素数组['a','b']
@s = split(/x/, 'axbx')
Run Code Online (Sandbox Code Playgroud)
生成相同的数组
@s = split(/x/, 'axbxxxx')
Run Code Online (Sandbox Code Playgroud)
生成相同的数组
但是当我在最后放置一些东西时,所有这些空字符串都会显示为元素:
@s = split(/x/, 'axbxxxxc')
Run Code Online (Sandbox Code Playgroud)
产生一个6元素数组['a','b','','','','c']
如果分隔符在开头,则行为类似.
我希望在分隔符之间,之前或之后的空文本总是在分割中生成元素.任何人都可以向我解释为什么分裂在Perl中表现得像这样?我只是在Python中尝试了相同的东西,它按预期工作.
注意:Perl v5.8
Cas*_*bel 46
从文档:
默认情况下,将保留空的前导字段,并删除空的尾随字段.(如果所有字段都为空,则认为它们是尾随的.)
这解释了您在尾随字段中看到的行为.这通常是有道理的,因为例如,人们通常非常粗心地追踪空白.但是,如果需要,您可以获取尾随空白字段:
split /PATTERN/,EXPR,LIMIT如果LIMIT为负数,则将其视为指定了任意大的LIMIT.
所以要获取所有尾随空字段:
@s = split(/x/, 'axbxxxxc', -1);
Run Code Online (Sandbox Code Playgroud)
(我假设你在看空领域时犯了一个粗心的错误 - 它们肯定会被保留下来.试试split(/x/, 'xaxbxxxx').结果的大小为3.)
| 归档时间: |
|
| 查看次数: |
14005 次 |
| 最近记录: |