找回密码
 加入
搜索
查看: 3551|回复: 7

[效率算法] [已解决]请教一个正则:匹配三个一样的数字

  [复制链接]
发表于 2011-5-28 20:23:09 | 显示全部楼层 |阅读模式
本帖最后由 qiuhai1991 于 2011-5-30 18:01 编辑

怎样找出一串带三个数字一样的行出来?


比如
123456789
111234567
101132254
545488813
121213999

找出:
111234567
545488813
121213999

(?m)(\d)\1\1.*
这样子却匹配出1、8、9三个数字,而匹配不到整行



#Include <Array.au3>
$str = 123456789&@CRLF& _
                111234567&@CRLF& _
                101132254&@CRLF& _
                545488813&@CRLF& _
                121213999
                
$a = StringRegExp($str,'(?m)(\d)\1\1.*',3)
_ArrayDisplay($a)
发表于 2011-5-28 21:09:57 | 显示全部楼层
本帖最后由 easefull 于 2011-5-28 21:14 编辑

(\d)\1{2}
用模式4.取每个结果数组的第1个元素

或者
((\d)\2{2})
用模式3,取了结果再过滤一次
发表于 2011-5-28 21:18:18 | 显示全部楼层
取整行的话自己加.*吧
发表于 2011-5-28 21:19:41 | 显示全部楼层
$str = 123456789&@CRLF& _
                111234567&@CRLF& _
                101132254&@CRLF& _
                545488813&@CRLF& _
                121213999
                
;$a = StringRegExp($str,'\b.*?(\d)(\1){2,}.*?\b',4)
$o_VBSREGEXP=ObjCreate("vbscript.regexp")
with $o_VBSREGEXP
        .global=1
        .pattern="\b.*?(\d)(\1){2,}.*?\b"
        $a=.execute($str)
EndWith
for $t in $a
        ConsoleWrite($t.value&@crlf)
Next
没办法,同样的测试用au3正则测试器找出来了却无法提取出,只能用vbs正则来啦
 楼主| 发表于 2011-5-28 23:49:08 | 显示全部楼层
这么麻烦啊,我还以为这是一个简单的正则
发表于 2011-5-29 00:11:51 | 显示全部楼层
#Include <Array.au3>
$str = 123456789&@CRLF& _
                111234567&@CRLF& _
                101132254&@CRLF& _
                545488813&@CRLF& _
                121213999
                
$a = StringRegExp($str,'.*000.*|.*111.*|.*222.*|.*333.*|.*444.*|.*555.*|.*666.*|.*777.*|.*888.*|.*999.*',3)
_ArrayDisplay($a)
发表于 2011-5-29 00:12:06 | 显示全部楼层
本帖最后由 tryhi 于 2011-5-29 00:16 编辑
#Include <Array.au3>
$str = 123456789&@CRLF& _
                111234567&@CRLF& _
                101132254&@CRLF& _
                545488813&@CRLF& _
                121213999
                
$a = StringRegExp($str,'.*000.*|.*111.*|.*222.*|.*333.*|.*444.*|.*555.*|.*666.*|.*777.*|.*888.*|.*999.*',3)
_ArrayDisplay($a)
感觉AU3的正则支持不是很好,\d{0,6}(\d)\1{2}\d{0,6}这句貌似其他语言可以
发表于 2011-5-29 00:25:41 | 显示全部楼层
#include <Array.au3>
Local $Str = _
                '123456789' & @CRLF & _
                '111234567' & @CRLF & _
                '101132254' & @CRLF & _
                '545488813' & @CRLF & _
                '121213999'
Local $Test = StringRegExp($str, '(?m)^.*?(\d)(\1{2,}).*?$', 4)
If Not @Error Then
        For $i = 0 To UBound($Test) - 1
                $temp=$Test[$i]
                $Test[$i]=$temp[0]
        Next
EndIf
_ArrayDisplay($Test)

评分

参与人数 2金钱 +40 贡献 +5 收起 理由
lixiaolong + 20 + 5 不太理解...
tryhi + 20 学习了

查看全部评分

您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-5-21 00:20 , Processed in 0.080019 second(s), 24 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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