一个字符重复出几次(不一定是连续)的规则要如何写
本帖最后由 auto 于 2022-9-23 15:03 编辑一个字符重复出几次(不一定是连续)的规则要如何写,
例: ABABAC A字符出现3次,要找出来AAA 1212145 1字符出现三次也要找出来111, 225234这次连续也要找出来222。。 333356 出现3个以上也找出来333。。 (\w)\w*?\1\w*?\1 (\w)(?:\w*?\1){2} zghwelcome 发表于 2022-9-23 10:13
(\w)(?:\w*?\1){2}
可能我的描述的问题,我的意思例如 121213 匹配后111 ,255226 匹配后222
不过你这个判断也可以了,虽然只出来一个数字,但有数据也代表是有某个字符重复达到一定的数量 zghwelcome 发表于 2022-9-23 10:13
(\w)(?:\w*?\1){2}
AU3可以找出来那个数字,换到别的语言不好使。。 auto 发表于 2022-9-23 15:03
可能我的描述的问题,我的意思例如 121213 匹配后111 ,255226 匹配后222
不过你这个判断也可以了, ...
au3正则函数不支持回调,应该没办法一步到位,需要自己调整再输出 auto 发表于 2022-9-23 15:07
AU3可以找出来那个数字,换到别的语言不好使。。
不同语言的正则引擎不一样,当然表达式不可能所有通用的 不用正则行不?
$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: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).*
这种可以吗?
(A|1|2|3)[^\1]{1,}\1 本帖最后由 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) lixiaolong 发表于 2022-9-26 19:27
9楼的不行,这个可以.
太难了,看不懂 StringReplace
@extended 是替换的次数
页:
[1]