找回密码  加入

AUTOIT CN

搜索
查看: 561|回复: 15

[AU3基础] 正则问题!比较烧脑!怎么匹配纯AB数字组合?

[复制链接]
发表于 2018-1-11 00:07:22 | 显示全部楼层 |阅读模式
本帖最后由 heavenm 于 2018-1-11 00:09 编辑

比如,由任意2-3种数字组成的字符串
匹配
12121212
33334433
55666666


不匹配
1212123
333331117

或者有什么方法能统计一串数字里有多少个独特元素不
 楼主| 发表于 2018-1-11 00:14:39 | 显示全部楼层
  1. $t = 23323234
  2. $n = StringLen($t)
  3. Dim $tt
  4. For $i = 1 To $n
  5.        
  6.         If Not StringRegExp( $tt,StringMid($t, $i, 1)) Then $tt&=StringMid($t, $i, 1)
  7. Next
  8. MsgBox(0, '', $tt)
复制代码
感觉太麻烦了,有正则可以一句搞定不,提取独立元素
发表于 2018-1-11 11:04:18 | 显示全部楼层
正则不会
  1. #include <Array.au3>
  2. $t = 23323234
  3. $a = StringSplit($t,'',2)
  4. $a = _ArrayUnique($a)
  5. _ArrayDisplay($a)
复制代码
发表于 2018-1-11 11:21:11 | 显示全部楼层
题意没看明白,不知道是不是这样
  1. $str = '03222622222221'
  2. $out = StringRegExpReplace($str,'(\d)(?=(?:.*?\1))','')
  3. MsgBox(0,0,$out)
复制代码

评分

1

查看全部评分

发表于 2018-1-11 11:36:31 | 显示全部楼层

题意没看明白,仰望楼上与楼下的高端玩家们
发表于 2018-1-11 19:16:03 | 显示全部楼层
  1. #include <array.au3>
  2. $str="12121212" & @CRLF & _
  3.                 "33334433" & @CRLF & _
  4.                 "55666666" & @CRLF & _
  5.                 "1212123" & @CRLF & _
  6.                 "333331117" & @CRLF & _
  7.                 "343434"
  8. $arr=StringRegExp($str,"(?m)^(?:\d{2}){1,}(?=\v|$)",3)
  9. If IsArray($arr) Then
  10.         _ArrayDisplay($arr)
  11. EndIf
复制代码
是这个意思吗?

评分

1

查看全部评分

 楼主| 发表于 2018-1-12 17:06:49 | 显示全部楼层
是这个意思吗?
kevinch 发表于 2018-1-11 19:16



    1212122 这个匹配不到
 楼主| 发表于 2018-1-12 17:16:03 | 显示全部楼层
奉献一段找手机靓号的代码
  1. #include <File.au3>
  2. Dim $__file

  3. #cs
  4. _FileReadToArray('PhoneNumber.txt', $__file)
  5. ;1xxabcdabcd
  6. For $i = 1 To $__file[0]
  7.         If _FilterNumbers($__file[$i]) > 1 Then MsgBox(0, _FilterNumbers($__file[$i]), $__file[$i])
  8. Next
  9. #ce
  10. MsgBox(0, '靓号等级', _FilterNumbers('15012121212'))
  11. Func _FilterNumbers($__number)
  12.         If StringIsSpace($__number) Then Return SetError(0)
  13.         Local $__tempText, $__level
  14.         ;★★★★★abcdabcd
  15.         $__a = StringRegExp($__number, '\d{3}(\d{4})', 3)
  16.         $__b = StringRegExp($__number, '\d{7}(\d{4})', 3)
  17.         If $__a[0] == $__b[0] Then $__level += 3


  18.         $__UniqueNumber=StringRegExpReplace(stringMid($__number, 4),'(\d)(?=(?:.*?\1))','')
  19.         If StringLen($__UniqueNumber) <= 2 Then $__level += 5 ;纯AB
  20.         If StringLen($__UniqueNumber) <= 3 Then $__level += 2 ;纯ABC

  21.         If StringRegExp($__number, '(\d\d)\1') Then $__level += 1;ABAB
  22.         If StringRegExp($__number, '(\d)\1(\d)\2') Then $__level += 1;AABB
  23.        
  24.         If StringRegExp($__number, '(\w)\1(?!\1)(\w)\2(?!\1|\2)(\w)\3') Then $__level += 2;AABBCC
  25.         If StringRegExp($__number, '^\d*(\d)\1\1(\d)\2\2\d*) Then $__level += 2;AAABBB
  26.         If StringRegExp($__number, '^(\d)(\d)\1\2\1\2\1\2) Then $__level += 2;ABABAB
  27.         If StringRegExp($__number, '^(\d)(\d)(\d)\1\2\3) Then $__level += 2;ABCABC
  28.         If StringRegExp($__number, '^(\d)(\d)\2\1\2\2) Then $__level += 2;ABBABB
  29.         If StringRegExp($__number, '^(\d)\1(\d)\1\1\2) Then $__level += 2;AABAAB
  30.         If StringRegExp($__number, '^\d*(\d)\1{4,}\d*) Then $__level += 2;5-8重复
  31.         Return $__level
  32. EndFunc   ;==>_FilterNumbers


复制代码
发表于 2018-1-12 17:32:06 | 显示全部楼层
回复 8# heavenm


    厉害  

能否继续分享一些靓号正则表达式?
 楼主| 发表于 2018-1-12 18:17:34 | 显示全部楼层
回复  heavenm


    厉害  

能否继续分享一些靓号正则表达式?
hnfeng 发表于 2018-1-12 17:32


构思中,哈你对这个感兴趣的话,有靓号规则分享给我!
发表于 2018-1-15 10:20:48 | 显示全部楼层
回复 10# heavenm


    我没有,只是突然感兴趣了。靓号的样式太多了,可能会想到很多……

可以试试一起想一些
发表于 2018-1-15 12:28:22 | 显示全部楼层
本帖最后由 hnfeng 于 2018-1-15 13:54 编辑
构思中,哈你对这个感兴趣的话,有靓号规则分享给我!
heavenm 发表于 2018-1-12 18:17


样式的表达(有了样式,正则就出来了)
ABCDEFGH 连续递增数字
      ABCD 可表示1234,2345,6789...
      ACEG 可表示1357,2468...
      ADG 可表示 147,258,369
      DCBA 可表示 4321,8765...
QRST 第二组连续递增数字
AAAA 重复数字
QQQQ 第二组重复数字
x 1个数字
* 0个或多个
j 1个或多个

含一组连续递增数字组
1xxABCDEFGH
1xx*ABCDEFG*
1xx*ABCDEF*
1xx*ABCDE*
1xx*ABCD*
1xx*ABC*
1xx*ACEG*
1xx*ACE*
1xx*ADG*

含一组连续递增数字组且位于尾部
1xxABCDEFGH
1xxjABCDEFG
1xxjABCDEF
1xxjABCDE
1xxjABCD
1xxjABC
1xxjACEG
1xxjACE
1xxjADG

含一组连续递增数字组且位于第7位
1xxACEG*
1xxxACE*
1xxxADG*

含两组连续递增数字组
1xxABCDQRST
1xxxABCxQRS
1xxABCxQRSx
1xx*ABCQRS*

含一组重复数字
1xxAAAAAAAA
1xx*AAAAAAA*
1xx*AAAAAA*
1xx*AAAAA*
1xx*AAAA*
1xx*AAA*

含两组重复数字
1xxAAAAQQQQ
1xx*AAA*QQQ*

递增+重复
1xxABCDABCD
1xxxABCxABC
1xx*ABC*ABC*
1xxQABCRABC
1xxABABABAB
1xx*ABABAB*
1xxxxABxxAB
1xxABQRABQR
....
太多了
发表于 2018-1-15 14:44:38 | 显示全部楼层
感觉阔以,跟我想了解的有点想通。
发表于 2018-1-16 15:09:48 | 显示全部楼层
正则看不懂,啊哈哈
发表于 2018-1-16 16:24:50 | 显示全部楼层
构思中,哈你对这个感兴趣的话,有靓号规则分享给我!
heavenm 发表于 2018-1-12 18:17



http://www.autoit3.cn/thread-56415-1-1.html

初学正则表达式,请指教
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2018-8-15 23:44 , Processed in 0.095775 second(s), 15 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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