【已解决】求帮助正则替换首尾数字,中间数字与中文不变,制表符分割
本帖最后由 longsir 于 2013-1-28 18:47 编辑64 1330063 上海 上海 中国电信 CDMA 021 200000
65 1330064 上海 上海 中国电信 CDMA 021 200000
67 1330066 上海 上海 中国电信 CDMA 021 200000
81 1330080 上海 上海 中国电信 CDMA 021 200000
300001 1850000 北京 北京 中国联通 GSM\/3G 010 100000
300002 1850539 山东 临沂 中国联通 GSM\/3G 0539 276000
300003 1850733 湖南 株洲 中国联通 GSM\/3G 0731 412000
300004 1850831 四川 宜宾 中国联通 GSM\/3G 0831 644000
300005 1851394 北京 北京 中国联通 GSM\/3G 010 100000
300006 1852576 辽宁 葫芦岛 中国联通 GSM\/3G 0429 125000
300007 1853441 山西 太原 中国联通 GSM\/3G 0351 030000
300008 1854588 黑龙江 哈尔滨 中国联通 GSM\/3G 0451 150000
300009 1855031 江苏 苏州 中国联通 GSM\/3G 0512 215000
300010 1855928 福建 厦门 中国联通 GSM\/3G 0592 361000
300011 1856058 山东 临沂 中国联通 GSM\/3G 0539 276000
300012 1856698 广东 东莞 中国联通 GSM\/3G 0769 523000
300013 1857040 湖南 岳阳 中国联通 GSM\/3G 0730 414000
300014 1857055 湖南 郴州 中国联通 GSM\/3G 0735 423000替换后为:
1857055,湖南 郴州 中国联通 GSM\/3G
1330080,上海 上海 中国电信 CDMA
前面数字最多6位,最少1位。中间制表符分割。后边区号3-4位,最后邮编是6位
怎么写正则呢? MsgBox(0,"",StringRegExpReplace(ClipGet(),'\d+\h+(\d+)\h+(\H+\h\H+\h+\H+\h\H+)\h+\d+\h+\d+',"$1,$2"))哈哈 写得一塌糊涂 只能证明我思考过。。。。。。来学习楼下的。 本帖最后由 afan 于 2013-1-27 20:44 编辑
木有制表符...StringRegExpReplace($str, '(?m)^\d+\h+(\d+)\h+(.+)\h+\d+\h+\d+', '$1,$2') $str = FileRead("1.txt")
MsgBox(0,"",$str)
$regexp=ObjCreate("vbscript.regexp")
With $regexp
.global=1
.multiline=1
.pattern="^\S+\t(\S+)\t(.*?)(\t\S+){2}$"
$str=.replace($str,"$1,$2")
EndWith
$regexp=null
MsgBox(0,"",$str)这个试下
如果是固定数据 ,而且 只需要处理一次. 这种数据 我一般用 excel 处理 . 回复 2# zch11230
这个办法可以的,完全可行,但是我那个全部是文本文件。
回复 3# afan
也可以,但不知道怎样输出到文本。
回复 4# kevinch
这个方法有点问题出现了错误E:\bak\crack\cxs.au3(5,16) : 错误: missing separator character after keyword.
.global=
~~~~~~~~~~~~~~~^
E:\bak\crack\cxs.au3(10,13) : 错误: 表达式错误
$regexp=null
~~~~~~~~~~~~^
E:\bak\crack\cxs.au3 - 2 错误, 0 警告
文本文件大概有27万条记录,太多了。大家在给个完整点的,谢谢了。 回复 5# sunless
我也试过excel ,不错,但是最大支持65535行,我那个27万条记录,完了还得排序。所以才用到正则 回复 3# afan
呵,用(?m)的确能使表达式清晰简单,不过,若串非常大,那么这种效率就低点了。因为这样的话,(.+)需要回溯的次数太多了,也需要更多的缓存来保存结果。当然对一般不大的文本而言,这种非常好。 回复 6# longsir
装excel2007或2010吧,支持1048576行,27万行已经小意思了 回复 9# kevinch
哦,那也只能这样了。 学习楼上楼上的。。。。
页:
[1]