免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 22242 | 回复: 10
打印 上一主题 下一主题

正则表达式怎样替换成tab键? [复制链接]

论坛徽章:
18
卯兔
日期:2013-09-27 17:41:0615-16赛季CBA联赛之佛山
日期:2016-07-09 17:34:45操作系统版块每周发帖之星
日期:2015-12-02 15:01:04IT运维版块每日发帖之星
日期:2015-12-02 06:20:00IT运维版块每日发帖之星
日期:2015-10-07 06:20:00IT运维版块每日发帖之星
日期:2015-10-03 06:20:00IT运维版块每日发帖之星
日期:2015-10-01 06:20:00羊年新春福章
日期:2015-04-01 17:56:06拜羊年徽章
日期:2015-04-01 17:56:062015年迎新春徽章
日期:2015-03-04 09:49:452015年辞旧岁徽章
日期:2015-03-03 16:54:15天秤座
日期:2015-01-14 06:39:28
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-10-18 19:28 |只看该作者 |倒序浏览
正则表达式,其他类型的格式,替换成tab键。
         eg:
         my $test ="aaaaaaaa|ab";
                $test =~s/\|/;/g;
                print "".$test."\n";
         这样就可以替换,但是如果替换成tab键,该怎样替换呢?

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

论坛徽章:
0
2 [报告]
发表于 2010-10-18 19:42 |只看该作者
tab键用\t表示。
文件的话,先打开文件,读取它,再逐行匹配和替换。

论坛徽章:
18
卯兔
日期:2013-09-27 17:41:0615-16赛季CBA联赛之佛山
日期:2016-07-09 17:34:45操作系统版块每周发帖之星
日期:2015-12-02 15:01:04IT运维版块每日发帖之星
日期:2015-12-02 06:20:00IT运维版块每日发帖之星
日期:2015-10-07 06:20:00IT运维版块每日发帖之星
日期:2015-10-03 06:20:00IT运维版块每日发帖之星
日期:2015-10-01 06:20:00羊年新春福章
日期:2015-04-01 17:56:06拜羊年徽章
日期:2015-04-01 17:56:062015年迎新春徽章
日期:2015-03-04 09:49:452015年辞旧岁徽章
日期:2015-03-03 16:54:15天秤座
日期:2015-01-14 06:39:28
3 [报告]
发表于 2010-10-18 20:10 |只看该作者
回复 2# 兰花仙子


   仙子,现在我是用这个替换的,但是却有
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
不知道怎么解决呢?

论坛徽章:
46
15-16赛季CBA联赛之四川
日期:2018-03-27 11:59:132015年亚洲杯之沙特阿拉伯
日期:2015-04-11 17:31:45天蝎座
日期:2015-03-25 16:56:49双鱼座
日期:2015-03-25 16:56:30摩羯座
日期:2015-03-25 16:56:09巳蛇
日期:2015-03-25 16:55:30卯兔
日期:2015-03-25 16:54:29子鼠
日期:2015-03-25 16:53:59申猴
日期:2015-03-25 16:53:29寅虎
日期:2015-03-25 16:52:29羊年新春福章
日期:2015-03-25 16:51:212015亚冠之布里斯班狮吼
日期:2015-07-13 10:44:56
4 [报告]
发表于 2010-10-18 20:11 |只看该作者
本帖最后由 zhlong8 于 2010-10-18 20:12 编辑

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

论坛徽章:
18
卯兔
日期:2013-09-27 17:41:0615-16赛季CBA联赛之佛山
日期:2016-07-09 17:34:45操作系统版块每周发帖之星
日期:2015-12-02 15:01:04IT运维版块每日发帖之星
日期:2015-12-02 06:20:00IT运维版块每日发帖之星
日期:2015-10-07 06:20:00IT运维版块每日发帖之星
日期:2015-10-03 06:20:00IT运维版块每日发帖之星
日期:2015-10-01 06:20:00羊年新春福章
日期:2015-04-01 17:56:06拜羊年徽章
日期:2015-04-01 17:56:062015年迎新春徽章
日期:2015-03-04 09:49:452015年辞旧岁徽章
日期:2015-03-03 16:54:15天秤座
日期:2015-01-14 06:39:28
5 [报告]
发表于 2010-10-18 20:19 |只看该作者
回复 4# zhlong8


   

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

论坛徽章:
46
15-16赛季CBA联赛之四川
日期:2018-03-27 11:59:132015年亚洲杯之沙特阿拉伯
日期:2015-04-11 17:31:45天蝎座
日期:2015-03-25 16:56:49双鱼座
日期:2015-03-25 16:56:30摩羯座
日期:2015-03-25 16:56:09巳蛇
日期:2015-03-25 16:55:30卯兔
日期:2015-03-25 16:54:29子鼠
日期:2015-03-25 16:53:59申猴
日期:2015-03-25 16:53:29寅虎
日期:2015-03-25 16:52:29羊年新春福章
日期:2015-03-25 16:51:212015亚冠之布里斯班狮吼
日期:2015-07-13 10:44:56
6 [报告]
发表于 2010-10-18 20:24 |只看该作者
本帖最后由 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的整数倍列

论坛徽章:
18
卯兔
日期:2013-09-27 17:41:0615-16赛季CBA联赛之佛山
日期:2016-07-09 17:34:45操作系统版块每周发帖之星
日期:2015-12-02 15:01:04IT运维版块每日发帖之星
日期:2015-12-02 06:20:00IT运维版块每日发帖之星
日期:2015-10-07 06:20:00IT运维版块每日发帖之星
日期:2015-10-03 06:20:00IT运维版块每日发帖之星
日期:2015-10-01 06:20:00羊年新春福章
日期:2015-04-01 17:56:06拜羊年徽章
日期:2015-04-01 17:56:062015年迎新春徽章
日期:2015-03-04 09:49:452015年辞旧岁徽章
日期:2015-03-03 16:54:15天秤座
日期:2015-01-14 06:39:28
7 [报告]
发表于 2010-10-18 20:29 |只看该作者
回复 6# zhlong8


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

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

论坛徽章:
46
15-16赛季CBA联赛之四川
日期:2018-03-27 11:59:132015年亚洲杯之沙特阿拉伯
日期:2015-04-11 17:31:45天蝎座
日期:2015-03-25 16:56:49双鱼座
日期:2015-03-25 16:56:30摩羯座
日期:2015-03-25 16:56:09巳蛇
日期:2015-03-25 16:55:30卯兔
日期:2015-03-25 16:54:29子鼠
日期:2015-03-25 16:53:59申猴
日期:2015-03-25 16:53:29寅虎
日期:2015-03-25 16:52:29羊年新春福章
日期:2015-03-25 16:51:212015亚冠之布里斯班狮吼
日期:2015-07-13 10:44:56
8 [报告]
发表于 2010-10-18 20:36 |只看该作者
你那种就是正确的方法,你还可以用 Data::Dumper 看下原始的字符串来检验,或者重定向到文件里面看。毕竟在终端显示下是无法区分\t和空格的

论坛徽章:
18
卯兔
日期:2013-09-27 17:41:0615-16赛季CBA联赛之佛山
日期:2016-07-09 17:34:45操作系统版块每周发帖之星
日期:2015-12-02 15:01:04IT运维版块每日发帖之星
日期:2015-12-02 06:20:00IT运维版块每日发帖之星
日期:2015-10-07 06:20:00IT运维版块每日发帖之星
日期:2015-10-03 06:20:00IT运维版块每日发帖之星
日期:2015-10-01 06:20:00羊年新春福章
日期:2015-04-01 17:56:06拜羊年徽章
日期:2015-04-01 17:56:062015年迎新春徽章
日期:2015-03-04 09:49:452015年辞旧岁徽章
日期:2015-03-03 16:54:15天秤座
日期:2015-01-14 06:39:28
9 [报告]
发表于 2010-10-18 21:21 |只看该作者
回复 8# zhlong8


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

论坛徽章:
46
15-16赛季CBA联赛之四川
日期:2018-03-27 11:59:132015年亚洲杯之沙特阿拉伯
日期:2015-04-11 17:31:45天蝎座
日期:2015-03-25 16:56:49双鱼座
日期:2015-03-25 16:56:30摩羯座
日期:2015-03-25 16:56:09巳蛇
日期:2015-03-25 16:55:30卯兔
日期:2015-03-25 16:54:29子鼠
日期:2015-03-25 16:53:59申猴
日期:2015-03-25 16:53:29寅虎
日期:2015-03-25 16:52:29羊年新春福章
日期:2015-03-25 16:51:212015亚冠之布里斯班狮吼
日期:2015-07-13 10:44:56
10 [报告]
发表于 2010-10-18 22:27 |只看该作者
就个循环和替换,重点在IO上应该很难提高了吧。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP