将制表符转换为可变数量的空格

ZDNet软件频道 时间:2004-02-16 作者:ZDNet China |  我要评论()
本文关键词:perltips
Perl在文本处理这个任务上简直是好用极了!它所进行的一个常见任务是把制表(tab)字符翻译成一定数量的空格,以维持文本的对齐。
本文译自Builder.com,未经许可请勿转载
Perl在文本处理这个任务上简直是好用极了!它所进行的一个常见任务是把制表(tab)字符翻译成一定数量的空格,以维持文本的对齐。

把制表符转换成空格的标准方法是计算到达制表符左侧的字符数量,然后将制表符用足够数量的空格来填充,直到移动到下一处制表符终止位。如果使用Perl的话,你可以很轻易地完成这个任务。

你要使用替换模式匹配操作符(substitution pattern-matching operator)找到命令行里的第一个制表符。然后使用length函数来计算制表符之前非制表字符的数量。再根据制表终止符的值分隔长度,并计算剩下的字符数,最后用正确数量的空格来替代制表符。

尽管在替换操作符后面使用/g修饰符很有吸引力,但是这个修饰符根本就不起作用。你必须每次都要重复整个模式匹配,这样你才能够知道最新使用替换空格的字符串的长度。

/e这个替换修饰符指定替换的右侧是代码,而不是一个简单的字符串。这就允许完成必要的计算,而不需要在替换字符串里进行变量替换。

下面是一个例子:

# expand tabs to spaces

# accept tabstop on command line or default to 4

$tabstop = $ARGV[0] + 0 || 4;

while (<STDIN>)
{
    1 while(s/^(.*?)( +)/ . ' ' x ($tabstop * length() - length() % $tabstop)/e);

    print;
}

Perl利用常规字符串处理文本的能力使得像扩展制表符这样的任务变得非常简单。



责任编辑:李宁

欢迎评论投稿

百度大联盟认证黄金会员Copyright© 1997- CNET Networks 版权所有。 ZDNet 是CNET Networks公司注册服务商标。
中华人民共和国电信与信息服务业务经营许可证编号:京ICP证010391号 京ICP备09041801号-159
京公网安备:1101082134