auto 发表于 2022-9-23 09:49:24

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

本帖最后由 auto 于 2022-9-23 15:03 编辑

一个字符重复出几次(不一定是连续)的规则要如何写,
例: ABABAC    A字符出现3次,要找出来AAA    1212145 1字符出现三次也要找出来111,   225234这次连续也要找出来222。。 333356 出现3个以上也找出来333。。

zghwelcome 发表于 2022-9-23 10:12:26

(\w)\w*?\1\w*?\1

zghwelcome 发表于 2022-9-23 10:13:22

(\w)(?:\w*?\1){2}

auto 发表于 2022-9-23 15:03:15

zghwelcome 发表于 2022-9-23 10:13
(\w)(?:\w*?\1){2}

可能我的描述的问题,我的意思例如 121213   匹配后111   ,255226 匹配后222
不过你这个判断也可以了,虽然只出来一个数字,但有数据也代表是有某个字符重复达到一定的数量

auto 发表于 2022-9-23 15:07:35

zghwelcome 发表于 2022-9-23 10:13
(\w)(?:\w*?\1){2}

AU3可以找出来那个数字,换到别的语言不好使。。

zghwelcome 发表于 2022-9-23 15:09:33

auto 发表于 2022-9-23 15:03
可能我的描述的问题,我的意思例如 121213   匹配后111   ,255226 匹配后222
不过你这个判断也可以了, ...

au3正则函数不支持回调,应该没办法一步到位,需要自己调整再输出

zghwelcome 发表于 2022-9-23 15:10:49

auto 发表于 2022-9-23 15:07
AU3可以找出来那个数字,换到别的语言不好使。。

不同语言的正则引擎不一样,当然表达式不可能所有通用的

lixiaolong 发表于 2022-9-24 20:28:38

不用正则行不?

$str = "ABABCA"

Global $len

$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)


lixiaolong 发表于 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).*

holley 发表于 2022-9-26 10:28:27

这种可以吗?
(A|1|2|3)[^\1]{1,}\1

lixiaolong 发表于 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)

auto 发表于 2022-9-29 11:25:26

lixiaolong 发表于 2022-9-26 19:27
9楼的不行,这个可以.

太难了,看不懂

user3000 发表于 2022-9-29 13:45:26

StringReplace
@extended 是替换的次数

页: [1]
查看完整版本: 一个字符重复出几次(不一定是连续)的规则要如何写