找回密码
 加入
搜索
查看: 10679|回复: 18

[效率算法] 一个正则表达式的疑问,(解决)

 火.. [复制链接]
发表于 2011-4-19 21:55:18 | 显示全部楼层 |阅读模式
本帖最后由 lluxury 于 2011-4-22 13:10 编辑

重新表达了下思路,请见10楼






1825/1826  要取/前成的部分
我写的 \b\w+(?=\/\b)
操作系统上可以取到,au3里就不行

$array = StringRegExp('1825/1826', '\b\w+(?=\/\b)', 3)
ConsoleWrite(" var" & $array & @CRLF)



这部分我没给全,和数组无关,其实是我取值取错了,取表的值,我给取成表这个变量身了.
                                $str=_IEPropertyGet($oInput, "innertext")
                                $sR = StringRegExp($str, '\b\w+(?=\:\b)', 3)
                                MsgBox(0, $str, $sR[0])
发表于 2011-4-19 22:04:02 | 显示全部楼层
本帖最后由 love5173 于 2011-4-19 22:05 编辑

我对ConsoleWrite命令不是很熟
但是貌似你输出的是数组,是不是表达方式有问题,字符串怎么跟数组混一起了
写成(\d+)\/  也可以的
发表于 2011-4-19 22:39:22 | 显示全部楼层
本帖最后由 水木子 于 2011-4-19 22:49 编辑

不大明白楼主想取得什么样的结果!

#Include <Array.au3>
$avArray = StringRegExp('1825/1826', '^\d+', 3)
_ArrayDisplay($avArray)
发表于 2011-4-19 22:46:49 | 显示全部楼层
1825/1826  要取/前成的部分
我写的 \b\w+(?=\/\b)
操作系统上可以取到,au3里就不行

$array = StringR ...
lluxury 发表于 2011-4-19 21:55


ConsoleWrite(" var" & $array[0] & @CRLF)

这时候$array是数组,你直接打印$array当然不行了。得象上面那样加脚标呀
 楼主| 发表于 2011-4-19 23:16:22 | 显示全部楼层
本帖最后由 lluxury 于 2011-4-19 23:23 编辑

发现了,谢谢大大,已改正,不过出来个新问题

我是从网页抓的数据
$oInput 的值为 1825/1826

                                发现了,谢谢大大,已改正,不过出来个新问题

我是从网页抓的数据,本身的数值如果带上引号,用上面的正则是可以的,但变量带上引号就失效了,这个怎么处理
                                $str=1825/1826
                                $sR = StringRegExp($str, '\b\w+(?=\:\b)', 3)
                                MsgBox(0, $str, $sR)
发表于 2011-4-19 23:20:47 | 显示全部楼层
变量&'常量'
只有变量就不用引号了
发表于 2011-4-19 23:22:22 | 显示全部楼层
回复 5# lluxury
大哥,刚说了数组不是那么表达的
msgbox(0,$str,$sr[0])
 楼主| 发表于 2011-4-19 23:22:46 | 显示全部楼层
楼上的,我试过,只有变量, 不用引号,正则无结果,貌似1825/1826自己先运算了
 楼主| 发表于 2011-4-19 23:27:38 | 显示全部楼层
回复  lluxury
大哥,刚说了数组不是那么表达的
msgbox(0,$str,$sr[0])
love5173 发表于 2011-4-19 23:22



    不好意思,拷错了,重编辑过
 楼主| 发表于 2011-4-19 23:32:37 | 显示全部楼层
重新表达下

我从网页里抓出来 $s=1825/1826
我只要前面的1825  有什么方法
发表于 2011-4-20 00:00:34 | 显示全部楼层
重新表达下

我从网页里抓出来 $s=1825/1826
我只要前面的1825  有什么方法
lluxury 发表于 2011-4-19 23:32



抓出来时,它是字符属性,不会计算的。你说了这么多,还不如把网址给出来,大家直接给你答案得了。
 楼主| 发表于 2011-4-20 00:13:32 | 显示全部楼层
本帖最后由 lluxury 于 2011-4-20 00:22 编辑

我是想给,问题要注册的,今天不能注册...


举个例子

#include <IE.au3>
Filedelete ("Tq.txt")
$Url="http://www.soso.com/tb.q"
$oIE = _IECreate ($url, 0, 0)
$sHTML = _IEBodyReadHTML ($oIE)
$array= StringRegExp($sHTML, "<(?i)strong class=fs_14>(.*?)</(?i)strong>",1)
for $i = 0 to UBound($array) - 1
$tqtemp = $array[$i]
Next
$tqtoday = StringReplace($tqtemp, " ", " ")
msgbox (32,"天气",$tqtoday)
_IEQuit ($oIE)


输出是     多云,11℃
我就要里面的11,该怎么做呢
发表于 2011-4-20 00:29:28 | 显示全部楼层
\d+(?=\\)
字数补丁
 楼主| 发表于 2011-4-20 00:54:34 | 显示全部楼层
本帖最后由 lluxury 于 2011-4-20 01:04 编辑

谢谢,13楼,验证了下,好像不行

另外发现一点,取汉字好像会取到2个数组里,也许是我写错了

$str="位置:铁掌山 "
$array = StringRegExp($str, '[^位置:]', 3)
MsgBox(0, $str, $array[0])

出来个铁....


更新
用字符串函数,出来了,但不是正则....
$array=StringTrimLeft ( $str,3 )
发表于 2011-4-20 08:01:43 | 显示全部楼层
回复 14# lluxury

$str="位置:铁掌山 "
$array = StringRegExp($str, '(?<=位置:).+', 3)
MsgBox(0, $str, $array[0])
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-5-20 23:05 , Processed in 0.081441 second(s), 24 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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