gzh888666 发表于 2020-4-23 20:33:01

请教一个正则(已解决)

本帖最后由 gzh888666 于 2020-4-24 12:34 编辑

字符串分割
str = '1、时代峰峻圣A43、诞快乐房间B爱上2、飞机撒打a开就93、分解浪费a20、服发动机4、发电量发送到......'
如何用ID增加1分割一下得到一个数组如:
a='1、时代峰峻圣A43、诞快乐房间B爱上'
a='2、飞机撒打a开就9'
a='3、分解浪费a20、服发动机'
a='4、发电量发送到'
.........

4楼正解,感谢

afan 发表于 2020-4-23 20:46:17

#include <Array.au3>
Local $sSource = '1、时代峰峻圣A43、诞快乐房间B爱上2、飞机撒打a开就3、分解浪费a20、服发动机4、发电量发送到...'
;~ MsgBox(0, '源字符串', $sSource)
Local $aSRE = StringRegExp($sSource, '\D?、\V+?\D(?=\d、|$)', 3)
If Not @Error Then MsgBox(0, '匹配数量: ' & UBound($aSRE), '其中元素为: ' & $aSRE)
_ArrayDisplay($aSRE, UBound($aSRE))

只针对你提供的字符串。
实际匹配需循环计算再匹配,因为正则本身并不能做数学计算

zghwelcome 发表于 2020-4-23 21:12:19

这种复杂情况是不是需要正则,外加逻辑分析拆分

zghwelcome 发表于 2020-4-23 21:43:04


#include <Array.au3>
Local $sSource = '1、时代峰峻圣A43、诞快乐房间B爱上2、飞机撒打a开就93、分解浪费a20、服发动机4、发电量发送到......'
Local $Num = 1
Local $aRet
While 1
        Local $aReg = StringRegExp($sSource, $Num & '、.+?(?=' & $Num + 1 & '、|$)', 1)
        If Not @error Then
                ReDim $aRet
                $aRet = $aReg
                $sSource = StringTrimLeft($sSource,StringLen($aReg))
                $Num += 1
        Else
                $aRet = $aRet & $sSource
                ExitLoop
        EndIf       
WEnd
_ArrayDisplay($aRet)

gzh888666 发表于 2020-4-23 22:41:28

afan 发表于 2020-4-23 20:46
只针对你提供的字符串。
实际匹配需循环计算再匹配,因为正则本身并不能做数学计算

A版,你看到贴子之后,我发现有瑕疵去改了一下,正则无法实现这种循环增加,需要加到循环里吧,但数字一直是增加的,位数也是增加的,可能到了ID:10000的情况,该如何正则匹配?

gzh888666 发表于 2020-4-23 22:43:29

zghwelcome 发表于 2020-4-23 21:43


思路太6了,感谢!{:1_206:}

afan 发表于 2020-4-23 23:40:30

gzh888666 发表于 2020-4-23 22:41
A版,你看到贴子之后,我发现有瑕疵去改了一下,正则无法实现这种循环增加,需要加到循环里吧,但数字一 ...

就如上面所说,4楼zgh的代码就是循环累加的例子

floor6ggg 发表于 2020-4-24 01:32:02

本帖最后由 floor6ggg 于 2020-4-24 01:36 编辑

借用afan大 和zghwelcome大 的代码,我也来一个 不严谨的正则 ,正向循环累加表达式,不清楚去到10000的时候还有没有效…………待测试………………

#include <Array.au3>
Local $sSource = '1、时代峰峻圣A43、诞快乐房间B爱上2、飞机撒打a开就93、分解浪费a20、服发动机4、发电量发送到......'
Local $Num = 1
Local $End=4      ;根据需要进行调整
Local $Pattern_Reg =""
for $i =$Num to $End
      $Pattern_Reg =$Pattern_Reg &'('&$i&'、.+)'
Next
$aReg = StringRegExp($sSource, $Pattern_Reg, 3)

_ArrayDisplay($aReg)

gzh888666 发表于 2020-4-24 12:34:00

floor6ggg 发表于 2020-4-24 01:32
借用afan大 和zghwelcome大 的代码,我也来一个 不严谨的正则 ,正向循环累加表达式,不清楚去到10000的时 ...

这个数额大了就不行了!还是感谢!4楼正解!
页: [1]
查看完整版本: 请教一个正则(已解决)