找回密码
 加入
搜索
查看: 2016|回复: 14

[效率算法] 请教一个对字符串拆分的问题[已解决]

  [复制链接]
发表于 2018-1-15 14:37:24 | 显示全部楼层 |阅读模式
本帖最后由 heroxianf 于 2018-1-16 11:47 编辑

请大家帮忙看看怎么能实现呢?自己想了好多都行不通。


$data1 = '33'
$data2 = '66'
$data3 = '88'
$data4 = '1233456766668910881212'

我想得到结果是:1 2 33 4 5 6 7 66 66 8 9 1 0 88 1 2 1 2
说明:我希望我设置的关键字在处理的时候能单独分出来占一个位置,没有设置的 就统一拆分成个体。


说明:楼下两位大大的方法能解决问题的。
发表于 2018-1-15 14:56:44 | 显示全部楼层
这问题到结果……  至少要说明下吧
发表于 2018-1-15 15:04:18 | 显示全部楼层
这意思?
Local $data1 = '33'
Local $data2 = '66'
Local $data3 = '88'
Local $data4 = '1233456766668910881212'
Local $sTmp = StringReplace($data4, $data1, 'a')
$sTmp = StringReplace($sTmp, $data2, 'b')
$sTmp = StringReplace($sTmp, $data3, 'c')
$sTmp = StringRegExpReplace($sTmp, '(.)(?=.)', '${1} ')
$sTmp = StringReplace($sTmp, 'a', $data1)
$sTmp = StringReplace($sTmp, 'b', $data2)
$sTmp = StringReplace($sTmp, 'c', $data3)
MsgBox(0, '', $sTmp)
 楼主| 发表于 2018-1-15 15:10:58 | 显示全部楼层
回复 3# afan

A大好厉害,  结果是这样的,我先测试一下我的数据。
 楼主| 发表于 2018-1-15 15:19:44 | 显示全部楼层
回复 3# afan

A大,如果我的数据里有很多其他字符,比如:


Local $data1 = '简历'
Local $data2 = '自学'
Local $data3 = '工资'
$data4 = '这是我的个人简历:a,我是自学;b,我没有学历;c,但是我现在工资已经有3680元;'
发表于 2018-1-15 15:30:57 | 显示全部楼层
#include <array.au3>
Local $data1 = '简历'
Local $data2 = '自学'
Local $data3 = '工资'
$data4 = '这是我的个人简历:a,我是自学;b,我没有学历;c,但是我现在工资已经有3680元;'
$Reg = StringRegExp($data4,'('&$data1 & '|' & $data2 & '|' & $data3&'|\V)',3)
If Not @error Then _ArrayDisplay($Reg)

评分

参与人数 1金钱 +20 收起 理由
heroxianf + 20 这个也不错。

查看全部评分

发表于 2018-1-15 15:39:58 | 显示全部楼层
回复  afan

A大,如果我的数据里有很多其他字符,比如:
heroxianf 发表于 2018-1-15 15:19



    上面只是示例,实际应用可以使用一些几乎不会出现的字符替换,且需在替换前 StringInstr() 确定不包含即可。
 楼主| 发表于 2018-1-15 15:43:15 | 显示全部楼层
回复 7# afan

谢谢A大了,我下来折腾一下,不晓得关键词多的话会不会影响速度。
发表于 2018-1-15 15:49:00 | 显示全部楼层
回复  afan

谢谢A大了,我下来折腾一下,不晓得关键词多的话会不会影响速度。
heroxianf 发表于 2018-1-15 15:43



    如果是这个意思替换的话,可以借鉴 zghwelcome 的方式,可以很简单
Local $data1 = '33'
Local $data2 = '66'
Local $data3 = '88'
Local $data4 = '1233456766668910881212'
$sTmp = StringRegExpReplace($data4, '(' & $data1 & '|' & $data2 & '|' & $data3 & '|\S)(?=.)', '${1} ')
MsgBox(0, '', $sTmp)
 楼主| 发表于 2018-1-15 16:09:07 | 显示全部楼层
回复 9# afan

他这个如果修改 $data3 = 12   就不能输出正确的。最后一个12  是分开的。
发表于 2018-1-15 16:18:48 | 显示全部楼层
回复 10# heroxianf


    把A版的这么改下
$sTmp = StringRegExpReplace($data4 & @CRLF, '(' & $data1 & '|' & $data2 & '|' & $data3 & '|\S)(?!=\v)', '${1} ')
 楼主| 发表于 2018-1-15 16:51:03 | 显示全部楼层
回复 11# zghwelcome


    貌似可以了,明天再测试更多数据看看。
 楼主| 发表于 2018-1-15 17:12:21 | 显示全部楼层
回复 11# zghwelcome

那我的关键词有几千个 是不是就卡的不行了?
发表于 2018-1-15 17:57:23 | 显示全部楼层
回复 13# heroxianf


   我搞不清楚你的具体需求,AU3中,大量数据时,StringRegExpReplace函数的效率相当低,试试 StringRegExp
 楼主| 发表于 2018-1-15 19:27:36 | 显示全部楼层
回复 14# zghwelcome

示例中的$data只是几个词而已,随着数据的处理,肯定会超过3000词。
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-12-24 07:28 , Processed in 0.114035 second(s), 21 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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