请教一个正则(已解决)
本帖最后由 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楼正解,感谢 #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))
只针对你提供的字符串。
实际匹配需循环计算再匹配,因为正则本身并不能做数学计算 这种复杂情况是不是需要正则,外加逻辑分析拆分
#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)
afan 发表于 2020-4-23 20:46
只针对你提供的字符串。
实际匹配需循环计算再匹配,因为正则本身并不能做数学计算
A版,你看到贴子之后,我发现有瑕疵去改了一下,正则无法实现这种循环增加,需要加到循环里吧,但数字一直是增加的,位数也是增加的,可能到了ID:10000的情况,该如何正则匹配? zghwelcome 发表于 2020-4-23 21:43
思路太6了,感谢!{:1_206:} gzh888666 发表于 2020-4-23 22:41
A版,你看到贴子之后,我发现有瑕疵去改了一下,正则无法实现这种循环增加,需要加到循环里吧,但数字一 ...
就如上面所说,4楼zgh的代码就是循环累加的例子 本帖最后由 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)
floor6ggg 发表于 2020-4-24 01:32
借用afan大 和zghwelcome大 的代码,我也来一个 不严谨的正则 ,正向循环累加表达式,不清楚去到10000的时 ...
这个数额大了就不行了!还是感谢!4楼正解!
页:
[1]