gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 11:09:06 29 4
gpt4 key购买 nike

我注意到 Perl 的 split 命令有一些奇怪的行为,特别是在我希望结果数组包含空字符串 '' 但实际上没有的情况下。

例如,如果我在 string 的末尾(或开头)有一个分隔符,则结果数组的最后(或第一个)元素没有空字符串 '' 。

例子:

@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);

(我假设您在查看前导空字段时犯了一个粗心的错误 - 它们肯定会被保留。尝试 split(/x/, 'xaxbxxxx') 。结果大小为 3。)

关于Perl 在分隔符之前/之后用空文本分割,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3711649/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com