找回密码
 加入
搜索
查看: 2532|回复: 4

[效率算法] [已解决]分割中英文混合字符串

[复制链接]
发表于 2010-8-6 09:27:16 | 显示全部楼层 |阅读模式
本帖最后由 xyold1 于 2010-8-6 10:45 编辑

要将一个中英文混合的字符串分开,比如“FAQ大全”分为“FAQ”到一个变量,“大全”到一个变量。
我的方案是分别判断字符串中的每一个字符是中文还是英文,在中英文之间加上一个特殊符号,用StringSplit 拆开
不过当字符串很长的时候会比较慢
有没有比较效率的算法?
正则表达式不知能不能做到
还请指点
谢谢

评分

参与人数 1金钱 +10 收起 理由
afan + 10 感谢主动将修改帖子分类为[已解决],请继续 ...

查看全部评分

发表于 2010-8-6 09:41:16 | 显示全部楼层
#include <array.au3>
$value = '+欢迎使用 ACN 中文论坛出品的 AUTOIT V3 汉化版!        +'
$rt=StringRegExp($value,'[a-zA-Z0-9]+',3)
_ArrayDisplay($rt)
$rt1=StringRegExp($value,'[^a-zA-Z0-9]+',3)
_ArrayDisplay($rt1)
$rt2=StringRegExpReplace($value,'[a-zA-Z0-9]+',"")
MsgBox(32,"",$rt2)
$rt3=StringRegExpReplace($value,'[^a-zA-Z0-9]+',"")
MsgBox(32,"",$rt3)
 楼主| 发表于 2010-8-6 10:05:43 | 显示全部楼层
回复 2# thesnow
谢谢Snow
我是要用TTS朗读文本的
中文一个引擎,英文一个引擎
你的办法是将中英文分开了,可是顺序没了
还有更好的办法吗?
发表于 2010-8-6 10:25:01 | 显示全部楼层
#include <array.au3>
$value = '+欢迎使用 ACN 中文论坛出品的 AUTOIT V3 汉化版!        +'
$rt=StringRegExp($value,'[a-zA-Z0-9]+|[^a-zA-Z0-9]+',3)
_ArrayDisplay($rt)

评分

参与人数 1金钱 +30 收起 理由
afan + 30

查看全部评分

 楼主| 发表于 2010-8-6 10:41:07 | 显示全部楼层
回复 4# thesnow


    谢谢
正则很强大
我也做了一个,笨办法
$value = '+欢迎使用 ACN 中文论坛出品的 AUTOIT V3 汉化版!        +'
$long=StringLen($value)
$flagA="E"
$start=1
$end=1
For $i=1 To $long
       
        $ii=StringMid($value,$i,1)
;~                 MsgBox(32,$ii,Asc ($ii))
        If Asc ($ii) <128 Then
                $flag="E"
        Else
                $flag="C"
        EndIf
        If $flagA<>$flag Then
                $end=$i
                MsgBox(32,"",StringMid($value,$start,$end-$start))
                $flagA=$flag
                $start=$i
        EndIf
        If $i=$long Then
                $end=$i
                MsgBox(32,"",StringMid($value,$start,$end-$start+1))
                EndIf
Next
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-11-15 01:29 , Processed in 0.085718 second(s), 28 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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