[已解决]关于文本解析,stringsplit函数的疑问
本帖最后由 blankboy 于 2012-5-2 11:28 编辑stringsplit()是用来拆分字符串的.返回的是拆分好的数组.我这里想用空格拆分,但是当有多个空格时,会拆分出空的字符串.具体的测试代码如下:#include<Array.au3>
$str = "a b"
$s = StringSplit($str,"")
_ArrayDisplay($s)
$ss = ""
For $i = 1 To $s
$ss = $ss & StringLen($s[$i]) & @CRLF
Next
MsgBox(0,"",$ss)
If StringIsSpace($s) Then
MsgBox(0,"","yes")
Else
MsgBox(0,"","no")
EndIf
在au3中,是不是多个分隔符连在一起都会这样?其实我一直认为这样分割出来的会是空格..结果都是空字符串...卡了一个多小时..都在用stringisspace来判断是否有多个空格,始终不对.
好吧,是我太菜了.帮助文档有时候确实不是万能的.. 用长度不定的空格拆分字符串,StringSplit 是不合适的,应该用正则#include<Array.au3>
$str = 'a b'
$a = StringRegExp($str, '\H+', 3)
_ArrayDisplay($a) 东西活学活用才好! 比如你给出的示例中, 可以先清除掉多余的空格再处理吧?
这里我先举个笨拙但易理解的:
#include<Array.au3>
$str = "a b"
While 1
If StringInStr($str, '') Then
$str = StringReplace($str,'', ' ')
Else
ExitLoop
EndIf
WEnd
$s = StringSplit($str," ")
_ArrayDisplay($s)
$ss = ""
For $i = 1 To $s
$ss = $ss & StringLen($s[$i]) & @CRLF
Next
MsgBox(0,"",$ss)
最后想说, 如果经常性的又想方便的处理各类字符串, 那很有必要学一学正则表达式.
比如上面的相关示例可以这样处理, 更简洁和方便:
#include<Array.au3>
$str = "a b"
$s = StringRegExp($str, '\H', 3)
_ArrayDisplay($s)
$str = StringRegExpReplace($str, '\h+', ' ')
MsgBox(0, 'Deleted', $str) 如果对正则不熟,也可以#include<Array.au3>
$str = 'a b'
$str = StringStripWS($str, 4)
$a = StringSplit($str, ' ')
_ArrayDisplay($a) 回复 2# afan
刷新第一遍时, 没看到您的回复啊.
回复完再刷新就出来了! 呵呵!
对于有问题者, 越多人插上一脚才好, 尤其是像您这样的大能者! 回复 2# afan
嗯,正则在文本处理方面确实是不可回避的坎.自己只是很少用,所以现在没来得及学,到时要大规模处理的时候再学. 回复 3# user3000
对空格进行消除用下面a大的函数更好,我查手册的时候粗心了. 回复 4# afan
对于没有正则基础的来说,这确实是比较优的解决方法. 回复 7# blankboy
惭愧, 用惯了正则, 一时真想不起 StringStripWS 这函数.
如果是空格, 当然用 StringStripWS 来合适!
就怕是别的字符了! 回复 4# afan
4 = 删除每个字符之间的双空格(或更多)
原来用StringStripWS这个函数一直以为是消除字符串中的所有空格,原来4的功能还能去除多空格只保留一个空格,又加深学习了。
我看帮助文件不仔细啊!感谢Afan大大。 回复 3# user3000
学习了,好多方法,异曲同工! 东西活学活用才好! 比如你给出的示例中, 可以先清除掉多余的空格再处理吧?
这里我先举个笨拙但易理解的:
...
user3000 发表于 2012-4-19 18:44 http://www.autoitx.com/images/common/back.gif
第一个看懂了,第二个里的\h是什么含义? 回复 12# whitehead
第二个是正则啊, \h 任何的水平空白字符+ 代表一个或多个此字符
这是正则基础, 你直接点这里的 StringRegExp就能看到详细说明啦! 回复 4# afan
学习了,这方法也不错唉。以前还真没注意到时这个函数。 回复whitehead
第二个是正则啊, \h 任何的水平空白字符+ 代表一个或多个此字符
这是正则基础, 你直 ...
user3000 发表于 2012-4-19 23:53 http://www.autoitx.com/images/common/back.gif
惭亏,谢谢user3000兄指教
页:
[1]
2