[已解决]分割中英文混合字符串
本帖最后由 xyold1 于 2010-8-6 10:45 编辑要将一个中英文混合的字符串分开,比如“FAQ大全”分为“FAQ”到一个变量,“大全”到一个变量。
我的方案是分别判断字符串中的每一个字符是中文还是英文,在中英文之间加上一个特殊符号,用StringSplit 拆开
不过当字符串很长的时候会比较慢
有没有比较效率的算法?
正则表达式不知能不能做到
还请指点
谢谢 #include <array.au3>
$value = '+欢迎使用 ACN 中文论坛出品的 AUTOIT V3 汉化版! +'
$rt=StringRegExp($value,'+',3)
_ArrayDisplay($rt)
$rt1=StringRegExp($value,'[^a-zA-Z0-9]+',3)
_ArrayDisplay($rt1)
$rt2=StringRegExpReplace($value,'+',"")
MsgBox(32,"",$rt2)
$rt3=StringRegExpReplace($value,'[^a-zA-Z0-9]+',"")
MsgBox(32,"",$rt3) 回复 2# thesnow
谢谢Snow
我是要用TTS朗读文本的
中文一个引擎,英文一个引擎
你的办法是将中英文分开了,可是顺序没了
还有更好的办法吗? #include <array.au3>
$value = '+欢迎使用 ACN 中文论坛出品的 AUTOIT V3 汉化版! +'
$rt=StringRegExp($value,'+|[^a-zA-Z0-9]+',3)
_ArrayDisplay($rt) 回复 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
页:
[1]