找回密码
 加入
搜索
查看: 1853|回复: 6

[效率算法] 【求助】正则如何排除不想要的内容?【已解决】

  [复制链接]
发表于 2018-3-12 10:12:59 | 显示全部楼层 |阅读模式
本帖最后由 网络书生 于 2018-3-12 11:33 编辑

okerStars Hand #2792278300014:
20:45:51 ET
Table '27922783'  button
Seat 1: 2456919248
Seat 2: 1835165825
Seat 3: 807556511
Seat 4: 2595026560
2456919248: posts
1835165825: posts
807556511: posts
2595026560: posts

如上文本我要把文本中数字部分大于等于八位的替换成前八位,后面的删除掉,红色部分的要保留不让替换,正则该怎么写?求大侠帮助,非常感谢!
发表于 2018-3-12 10:26:30 | 显示全部楼层
先把
okerStars Hand #2792278300014:
20:45:51 ET
Table '27922783'  button
这段替换为临时字符串
再替换数字部分
临时字符串替换回。

不要把问题搞复杂了,分步操作更易维护,正则不绕弯,执行速度还会更快。
 楼主| 发表于 2018-3-12 10:33:25 | 显示全部楼层
回复 2# afan

原来也想过这个办法,但是发现不好弄,主要是文本量很大,有多个文本,一个文本中有很多处okerStars Hand #2792278300014:这样的日志,我只是摘了一个,并且这个数字在不停增加变化
发表于 2018-3-12 10:51:01 | 显示全部楼层
回复 3# 网络书生


### 友情提示:本脚本由 Au3.REHelper 于 2018/03/12 10:50 自动生成,不保证其正确性,请自行测试 ###
Local $sSource = _
                'okerStars Hand #279227830045745737014:' & @CRLF & _
                '20:45:51 ET' & @CRLF & _
                "Table '279227836565'  button" & @CRLF & _
                'Seat 1: 2456919248 ' & @CRLF & _
                'Seat 2: 1835165825' & @CRLF & _
                'Seat 3: 807556511 ' & @CRLF & _
                'Seat 4: 2595026560 ' & @CRLF & _
                '2456919248: posts ' & @CRLF & _
                '1835165825: posts ' & @CRLF & _
                '807556511: posts ' & @CRLF & _
                '2595026560: posts' & @CRLF & _
                'okerStars Hand #56862792278014:' & @CRLF & _
                '20:45:51 ET' & @CRLF & _
                "Table '642792278365'  button" & @CRLF & _
                'Seat 1: 572456919248 ' & @CRLF & _
                'Seat 2: 541835165825' & @CRLF & _
                'Seat 3: 43807556511 ' & @CRLF & _
                'Seat 4: 4562595026560 ' & @CRLF & _
                '2456919248: posts ' & @CRLF & _
                '1835165825: posts ' & @CRLF & _
                '807556511: posts ' & @CRLF & _
                '2595026560: posts'
;~MsgBox(0, '源字符串', $sSource)
Local $sSRERe = StringRegExpReplace($sSource, '((?<=\s)\d{8})\d+', '\1')
MsgBox(0, '替换结果', $sSRERe)
发表于 2018-3-12 10:53:30 | 显示全部楼层
本帖最后由 hnfeng 于 2018-3-12 11:06 编辑

那就 修改一下正则表达式 排除 以 #' 开头的数字串
正则表达式昨天A大给你了,稍稍修改一下

匹配的是 (?<!['#\d])\d{8}
发表于 2018-3-12 11:14:42 | 显示全部楼层
A 大 的代码很好,赞一下
我也搞出来了
替换那行是这样:
Local $sSRERe = StringRegExpReplace($sSource, "((?<!['#\d])\d{8})\d+", '\1')
 楼主| 发表于 2018-3-12 11:27:57 | 显示全部楼层
本帖最后由 网络书生 于 2018-3-12 11:32 编辑

回复 4# afan  hnfeng

谢谢A大和hnfeng,问题终于解决了,还是正则不熟悉啊,多谢二位了,我开始也是想着 排除 以 # 或 ' 开头的数字串,但就是不知道怎么写,开始写成"[^#']\b\d{8,}"了,但是看结果替换后有些空格被替换了还有些数字没有被替换。
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-11-16 11:05 , Processed in 0.070681 second(s), 20 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表