找回密码
 加入
搜索
查看: 955|回复: 12

[AU3基础] 一个字符重复出几次(不一定是连续)的规则要如何写

[复制链接]
发表于 2022-9-23 09:49:24 | 显示全部楼层 |阅读模式
本帖最后由 auto 于 2022-9-23 15:03 编辑

一个字符重复出几次(不一定是连续)的规则要如何写,
例: ABABAC    A字符出现3次,要找出来AAA    1212145 1字符出现三次也要找出来111,   225234  这次连续也要找出来222。。 333356 出现3个以上也找出来333。。
发表于 2022-9-23 10:12:26 | 显示全部楼层
(\w)\w*?\1\w*?\1
发表于 2022-9-23 10:13:22 | 显示全部楼层
(\w)(?:\w*?\1){2}
 楼主| 发表于 2022-9-23 15:03:15 | 显示全部楼层

可能我的描述的问题,我的意思例如 121213   匹配后111   ,255226 匹配后222
不过你这个判断也可以了,虽然只出来一个数字,但有数据也代表是有某个字符重复达到一定的数量
 楼主| 发表于 2022-9-23 15:07:35 | 显示全部楼层

AU3可以找出来那个数字,换到别的语言不好使。。
发表于 2022-9-23 15:09:33 | 显示全部楼层
auto 发表于 2022-9-23 15:03
可能我的描述的问题,我的意思例如 121213   匹配后111   ,255226 匹配后222
不过你这个判断也可以了, ...

au3正则函数不支持回调,应该没办法一步到位,需要自己调整再输出
发表于 2022-9-23 15:10:49 | 显示全部楼层
auto 发表于 2022-9-23 15:07
AU3可以找出来那个数字,换到别的语言不好使。。

不同语言的正则引擎不一样,当然表达式不可能所有通用的
发表于 2022-9-24 20:28:38 | 显示全部楼层
不用正则行不?

$str = "ABABCA"

Global $len[StringLen($str)]

$t = 0
$u = ""

For $i = 1 To StringLen($str)
        $a = StringMid($str, $i, 1)

        For $j = 0 To UBound($len) - 1
                $len[$j] = StringMid($str, $j + 1, 1)
                If $a = $len[$j] Then
                        $t += 1
                        $u &= $a
                        If StringLen($u) = 3 Then ExitLoop
                EndIf
        Next
        If $t = 3 Then
                MsgBox(0, "结果", $u)
                ExitLoop
        Else
                $t = 0
                $u = ""
        EndIf
Next

If Not $t Then MsgBox(16, $t, $u)



发表于 2022-9-25 15:39:19 | 显示全部楼层
本帖最后由 lixiaolong 于 2022-9-25 15:44 编辑

试试这个

Local $sSource = 'ABABAC'
;~ MsgBox(0, '源字符串', $sSource)
Local $sSRERe = StringRegExpReplace($sSource, '.{0,}(.)(.*)(\1)(.*)(\1).*', '\1\3\5')
MsgBox(0, '替换结果', $sSRERe)


替换
\1\3\5
.{0,}(.)(.*)(\1)(.*)(\1).*

发表于 2022-9-26 10:28:27 | 显示全部楼层
这种可以吗?
(A|1|2|3)[^\1]{1,}\1
发表于 2022-9-26 19:27:08 | 显示全部楼层
本帖最后由 lixiaolong 于 2022-9-26 19:33 编辑

9楼的不行,这个可以.

Local $sSource = 'BABAC1212145'
;~ MsgBox(0, '源字符串', $sSource)
Local $sSRERe = StringRegExpReplace($sSource, '(?:^|.*?)(.)(.*)(\1)(.*)(\1).*', '\1\3\5')
MsgBox(0, '替换结果', $sSRERe)
 楼主| 发表于 2022-9-29 11:25:26 | 显示全部楼层
lixiaolong 发表于 2022-9-26 19:27
9楼的不行,这个可以.

太难了,看不懂
发表于 2022-9-29 13:45:26 | 显示全部楼层
StringReplace
@extended 是替换的次数

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

本版积分规则

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

GMT+8, 2024-3-28 21:50 , Processed in 0.079282 second(s), 19 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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