求助正则表达式处理文档
本帖最后由 lluxury 于 2013-6-11 12:58 编辑现有一个我保存下来的网页叫d.htm
z我想用au3读入该文件
然后用正刚表达式过滤出符合要求的字段,再生成新文件
文件源码如下 网页显示 [lap·top || 'læptɑp /-tɒp]需要黑体部分
border="0"/> </DIV><DIV style="OVERFLOW-X: hidden; WIDTH: 100%"><DIV style="MARGIN: 0px 0px 5px; COLOR: #808080; LINE-HEIGHT: normal"><SPAN style="FONT-SIZE: 10.5pt; COLOR: #000000; LINE-HEIGHT: normal"><B>laptop</B></SPAN> <SPAN style="FONT-SIZE: 10.5pt; LINE-HEIGHT: normal; FONT-FAMILY: 'Lingoes Unicode'">[<FONT color="#009900">lap·top || 'læptɑp /-tɒp</FONT>]</SPAN></DIV><DIV style="MARGIN: 0px 0px 5px"><DIV style="MARGIN: 4px 0px"><FONT color="#C00000">n.</FONT> portable computer, small computer which is light enough to place on one's lap (Computers)</DIV></DIV></DIV></DIV></DIV></DIV></DIV></DIV><DIV id="dict_3253C2A669C4DB4F8508B5FC4A017DDE" style="PADDING-RIGHT: 10px; PADDING-LEFT: 10px; FONT-SIZE: 10.5pt; PADDING-BOTTOM: 0px; WIDTH: 100%; LINE-HEIGHT: 1.2em; PADDING-TOP: 10px; FONT-FAMILY: 'Tahoma'" groupid="4" dictid="3253C2A669C4DB4F8
同一个文档 再补充一段 网页显示 [pænts]需要黑体部分
<DIV style="MARGIN: 5px 0px"><DIV style="WIDTH: 100%"><DIV style="FLOAT: left; LINE-HEIGHT: normal"><IMG height="11" src="file:///C:/Program%20Files/Lingoes/Translator2/dict/image/entry_p.png" width="10" align="absmiddle" border="0"/> </DIV><DIV style="OVERFLOW-X: hidden; WIDTH: 100%"><DIV style="MARGIN: 0px 0px 5px; COLOR: #808080; LINE-HEIGHT: normal"><SPAN style="FONT-SIZE: 10.5pt; COLOR: #000000; LINE-HEIGHT: normal"><B>pants</B></SPAN> <SPAN style="FONT-SIZE: 10.5pt; LINE-HEIGHT: normal; FONT-FAMILY: 'Lingoes Unicode'">[<FONT color="#009900">pænts</FONT>]</SPAN></DIV><DIV style="MARGIN: 0px 0px 5px"><DIV style="MARGIN: 4px 0px"><FONT color="#C00000">n.</FONT> trousers, pantaloons; underwear, panties, underpants; (British) shorts</DIV></DIV></DIV></DIV></DIV><DIV style="PADDING-RIGHT: 0px; BORDER-TOP: #c7d4dc 1px solid; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; PADDING-TOP: 5px"></DIV><DIV style="MARGIN: 5px 0px"><DIV style="WIDTH: 100%"><DIV style="FLOAT: left; LINE-HEIGHT: normal"><IMG height="11" src="file:///C:/Program%20Files/Lingoes/Translator2/dict/image/entry_p.png" width="10" 这么多东西你到底要什么啊你没说 回复 2# lainline
额,刚才没打完,我要的是黑体部分的,有很多个不同的字符串,格式类似 回复 1# lluxury
可以直接读取HTML文件或是网址的内容,但可能需要进行转码(内容显示为乱码时).
正则可以这样先匹配出方括号内字体颜色为某色的内容,然后再进一步处理"||后面的部分").
StringRegExp($html, '(?i)\[<FONT color="#009900">([^<>]+)</FONT>\]', 3) 本帖最后由 afan 于 2013-5-13 20:16 编辑
现在的中文越来越难懂了……#include <Array.au3>
Local $sData = FileRead('C:\d.htm')
Local $aSR = StringRegExp($sData, '#009900">(.+?)\h*(?:\|.+?)?<', 3)
_ArrayDisplay($aSR, UBound($aSR))
本帖最后由 lluxury 于 2013-5-13 20:35 编辑
回复 4# user3000
不是网页,是htm文件,那台机器上不了网的 现在的中文越来越难懂了……
afan 发表于 2013-5-13 20:15 http://www.autoitx.com/images/common/back.gif
让版主见笑了^^ 现在的中文越来越难懂了……
afan 发表于 2013-5-13 20:15 http://www.autoitx.com/images/common/back.gif
不得不服,搞了一晚上,不如版主4行代码.... 回复 5# afan
A版竟然看懂了·{:face (394):} 本帖最后由 lluxury 于 2013-6-13 10:50 编辑
#009900">(.+?)\h*(?:\|.+?)?<
谁能帮忙解释下这个语句的思路
#009900">前面特征码
(.+?) 懒得匹配
\h* 多个 空格
(?:\|.+?) \|后面的丢弃
? 匹配一次或不匹配
< 后面特征码 回复 10# lluxury
高深的,我们就只管用,不要知其所以然嘛 回复 11# happytc
有意义么,来论坛就是为了弄懂 本帖最后由 xms77 于 2013-6-11 13:08 编辑
回复 10# lluxury
我试着解释一下
首先你要提取的字符是在#009900">。。。。。。。<里边,对吧?
(.+?)表示括号里面的字符串是你要要提取的,字符有什么要求呢?使用了.+?表达式,.表示任意的单字符 (除换行符以外),+表示前面的单字符重复的次数必须要1次以上,?表示尽可能的少匹配,也就是所谓的懒惰模式,例如:以这个表达式为例:a.*b,它将会匹配最长的以a开始,以b结束的字符串。如果用它来搜索aabab的话,它会匹配整个字符串aabab。这被称为贪婪匹配,而所谓的懒惰匹配,只要在它后面加上一个问号? 就是要求匹配尽可能少的字符。那么a.*?b匹配最短的,以a开始,以b结束的字符串。如果把它应用于aabab的话,它会匹配aab(第一到第三个字符)和ab(第四到第五个字符)
\h表示所有空白符的单个字符,这里来匹配空格,\h*表示可以没有空格也可以有一个以上的空格
(?:。。。。。。)表示这个括号中的内容是不需要提取的,但是要组成一组字符串
\|表示|这个字符,因为|这个字符在正则中有特殊意义,所以称之谓元字符,要表示|字符就要用\来转意,如果我要表达\这个字符,那么就要用\\来表示
.+?和上面提到的是一个意思
?同样是采用懒惰模式来匹配(?:\|.+?)
以上不知道对你有没有用,楼主不妨搜索“正则表达式”,论坛里面有很多教程。 本帖最后由 lluxury 于 2013-6-13 10:45 编辑
回复 13# xms77
恩,我的感觉是a版用了懒惰模式,取1次或0次 ()中的表达式来判断,以满足我提出的2种情况. 我现在只需要第一种情况
所以我试图把最后一个?改成+号,使之取 1次或1次以上()中的表达式,但是没有成功
只有最后一个?号取0的时候,才有值输出,不知道为什么
也就是说,我现在如果只要 >到||之间的部分,其他一概舍弃呢,貌似|不能和<一样当做尾部的分隔符 本帖最后由 xms77 于 2013-6-13 12:31 编辑
回复 14# lluxury
应该是用‘\|’来表示‘|’,因为它是特殊字符(就是所谓的元字符),所以两个|要这样表示‘\|\|’
页:
[1]
2