找回密码
 加入
搜索
查看: 2151|回复: 8

[网络通信] 请教一个正则(已解决)

[复制链接]
发表于 2020-4-23 20:33:01 | 显示全部楼层 |阅读模式
本帖最后由 gzh888666 于 2020-4-24 12:34 编辑

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

a[0]='1、时代峰峻圣A43、诞快乐房间B爱上'
a[1]='2、飞机撒打a开就9'
a[2]='3、分解浪费a20、服发动机'
a[3]='4、发电量发送到'
.........


4楼正解,感谢
发表于 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?[1-9]、\V+?\D(?=\d、|$)', 3)
If Not @Error Then MsgBox(0, '匹配数量: ' & UBound($aSRE), '其中[0]元素为: ' & $aSRE[0])
_ArrayDisplay($aSRE, UBound($aSRE))
只针对你提供的字符串。
实际匹配需循环计算再匹配,因为正则本身并不能做数学计算

评分

参与人数 1金钱 +20 贡献 +8 收起 理由
gzh888666 + 20 + 8 赞一个!

查看全部评分

发表于 2020-4-23 21:12:19 | 显示全部楼层
这种复杂情况是不是需要正则,外加逻辑分析拆分
发表于 2020-4-23 21:43:04 | 显示全部楼层

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


评分

参与人数 1金钱 +20 贡献 +8 收起 理由
gzh888666 + 20 + 8 赞一个!

查看全部评分

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

A版,你看到贴子之后,我发现有瑕疵去改了一下,正则无法实现这种循环增加,需要加到循环里吧,但数字一直是增加的,位数也是增加的,可能到了ID:10000的情况,该如何正则匹配?
 楼主| 发表于 2020-4-23 22:43:29 | 显示全部楼层

思路太6了,感谢!
发表于 2020-4-23 23:40:30 | 显示全部楼层
gzh888666 发表于 2020-4-23 22:41
A版,你看到贴子之后,我发现有瑕疵去改了一下,正则无法实现这种循环增加,需要加到循环里吧,但数字一 ...

就如上面所说,4楼zgh的代码就是循环累加的例子
发表于 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)

评分

参与人数 1金钱 +20 贡献 +8 收起 理由
gzh888666 + 20 + 8 赞一个!

查看全部评分

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

这个数额大了就不行了!还是感谢!4楼正解!
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-12-23 14:05 , Processed in 0.078651 second(s), 21 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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