+ -
当前位置:首页 → 问答吧 → 正则表达式怎样替换成tab键?

正则表达式怎样替换成tab键?

时间:2010-10-18

来源:互联网

正则表达式,其他类型的格式,替换成tab键。
         eg:
         my $test ="aaaaaaaa|ab";
                $test =~s/\|/;/g;
                print "".$test."\n";
         这样就可以替换,但是如果替换成tab键,该怎样替换呢?

                如果是一个文件
                my $test ="abc.txt";
                怎样进行替换?
               
谢谢大家的帮助!

作者: qingduo04   发布时间: 2010-10-18

tab键用\t表示。
文件的话,先打开文件,读取它,再逐行匹配和替换。

作者: 兰花仙子   发布时间: 2010-10-18

回复 兰花仙子


   仙子,现在我是用这个替换的,但是却有
my $test ="aaaaaaaa|ab";
$test =~s/\|/\t/g;
print "".$test."\n";
变量$test的内容不一样,却有不同的答案
如下:
E:\programme>perl  E:\programme\正则表达式.pl
aaa     ab

E:\programme>perl  E:\programme\正则表达式.pl
aaaaaaaa        ab
不知道怎么解决呢?

作者: qingduo04   发布时间: 2010-10-18

本帖最后由 zhlong8 于 2010-10-18 20:12 编辑

\t的显示效果是8的整数倍列对齐,显示时候它不是固定宽度的。你如果想列对齐的话应该用 sprintf

作者: zhlong8   发布时间: 2010-10-18

回复 zhlong8


   
下载 (7.25 KB)
2010-10-18 20:18


我把结果复制上来,如上图,tab键显示是>号,而打印出来的是空格键,不知道我这样理解是不是正确?

作者: qingduo04   发布时间: 2010-10-18

本帖最后由 zhlong8 于 2010-10-18 20:38 编辑

不知道你图什么意思,我也给你画个图:)
“abc\td"
显示为:
abc     d     #中间5个空格
"abcdefgh\ti"
显示为:
abcdefgh        i   #中间8个空格

因为你的第一个aaa只有3个字符,所以\t的下一个字符就放在下一个8的整数倍列,所以显示效果为3个空格的距离,第二个你有8个a所以\t的下一个字符就是在下一组8的整数倍列的开始了

反正\t至少占一个字符的宽度显示为空格的效果,然后把下一个字符推到8的整数倍列

作者: zhlong8   发布时间: 2010-10-18

回复 zhlong8


    谢谢,清楚了。
我那张图片,第一行是程序中打印的。
第二行是我在UE中,敲入tab键显示的。
第三行是程序跑出来的结果,我复制的。

因为我做bi负责接口,而有的平台给的数据是其他分隔符,这边的负责人,让全部把非tab键的分隔符,替换成tab键,我不知道用刚刚的方法能不能实现这个功能?

作者: qingduo04   发布时间: 2010-10-18

你那种就是正确的方法,你还可以用 Data::Dumper 看下原始的字符串来检验,或者重定向到文件里面看。毕竟在终端显示下是无法区分\t和空格的

作者: zhlong8   发布时间: 2010-10-18

回复 zhlong8


    谢谢,已经实现了,也实现了文件内容的替换。
实现的原理:
打开文件,一行一行的去替换,然后又一行一行的写入到文件中,不知道这样效率高不高?有没有更高的方法,还烦指点。
数据文件的记录条数可能有几百万或者几千万。

作者: qingduo04   发布时间: 2010-10-18

就个循环和替换,重点在IO上应该很难提高了吧。

作者: zhlong8   发布时间: 2010-10-18