string - 当 $STRING 以 "\t\t"结尾时,如何让 split(/\t/, $STRING) 检测空值?

标签 string perl whitespace trailing

$STRING"\t\t"结尾时,如何使 split(/\t/, $STRING) 检测空项目?

使用 Perl 脚本,我尝试将字符串拆分为项目之间的分隔符,然后计算并使用这些项目。但是,当字符串以组合 s 结尾时,脚本不计算空项。

例子:

string="value1\tvalue2\t\t\t\t"(value1、value2和4个空项)

但它计算 2 个项目(value1,value2):

$STRING="value1\tvalue2\t\t\t\t";
print $STRING."\n";
my @F = split(/\t/, $STRING);
print scalar(@F)."\n";

# The number of items must match the number of header name
if( scalar(@F) == 6 )
            {
                    print  "Done \n";
            }

代码打印:

value1  value2      
2

而预期是:

value1  value2  
6

最佳答案

通过添加 -1 作为参数来更改 split 行:

my @F = split(/\t/, $STRING, -1);

输出:

value1  value2              
6
Done 

根据 perldoc splitsplit的参数是PATTERN, EXPR, LIMIT。在您当前的情况下,“LIMIT 被省略,因此”尾随空字段被剥离。”

通过为 LIMIT 添加 -1 值:

If LIMIT is negative, it is treated as if it were instead arbitrarily large; as many fields as possible are produced.

所以一个否定的最终参数会阻止 split 丢弃尾随字段。

关于string - 当 $STRING 以 "\t\t"结尾时,如何让 split(/\t/, $STRING) 检测空值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57399593/

相关文章:

perl - 无法使用 Perl 中的 LWP::Simple 通过 HTTPS 获取页面

python - 无法从 Perl 捕获 Python 中的单引号字符串

regex - 在所有文件中递归地将所有 <h2> 标记替换为 <h1> 的 Perl 脚本

html - 网页四面出现白线

c - strtok 问题,它没有按预期工作

c - 递归函数 : Remove substring from string in C

angularjs - 在 AngularJS 中替换字符串中的字符

javascript - 如何从字符串中删除所有出现的任何给定字符?

java - Java中去除字符串中的所有空格并将其转换为数组

html - 如何保留包含在 HTML <pre> 标签中的文本的空白缩进,不包括文档中 <pre> 标签的当前缩进级别?