自己一直没有正儿八经的学过正则式,虽知道原理,却一直没有咋用过。近来项目要用。所以只好现学。
首先用python写,建立一个文件。把乱七八糟的字符串往里丢呀。做了一个小实验,感觉与犹未尽。于是随便开了一个网页,找到源码。指定一行,然后写pattern
.
我写的pattern比较简单。因为本来就简单。
比如你想匹配这样一段:
<div class="pd-dload">
<a href="/projects/inkscape/files/inkscape/Inkscape-0.47pre0-1.win32.exe/download" mce_href="projects/inkscape/files/inkscape/Inkscape-0.47pre0-1.win32.exe/download" class="button button-dload dload { url: 'http://downloads.sourceforge.net/sourceforge/inkscape/Inkscape-0.47pre0-1.win32.exe' }" title="Inkscape-0.47pre0-1.win32.exe: 0.47pre0 released on Jul 02 2009"><span><b>Download Now!</b> Inkscape-0.47pre0-1.win32... (36.4 MiB)</span></a><small>OR</small><a href="/projects/inkscape/files/" mce_href="projects/inkscape/files/" class="button button-more"><span>View all files</span></a>
</div>
如果< div class = “pd-dload”
就出现过一次那就很简单。(多次的我还没有遇到,所以没有解决)pattern的最后结尾为。那么应该是’< div class = “pd-
dload” >XOXOXOXOXOX‘的形式,其中的那段怎么写呢?/w是匹配所有的字符[a-zA-Z0-9_],那么先用这个< div
class = “pd-dload” >[/w]?,这里?在python代表最小匹配,例如siisis 这样一个串,
如果写<[/w]>为其pattern,其中的>就无法匹配,但是你写<[/w]?>就可将匹配成功。
代码这样写:
import re f = open(‘C://Python31//regular//a.txt’) content = f.read()
print(content) reg = re.compile(“
print(reg.findall(content))
结果是啥都没有[],现在将[/w]?去掉,变为< div class = “pd-dload” >,是不是可以匹配一部分?哈哈~那就是
说后面的那个写的有问题。仔细看看你的那些字符,其中有可能有各种各样的字符例如/n、空格、:、“、’、.等。其中/s可以匹配很多诸如空格回车之类的符号,然后你
再手工添加其他的符号.添加完毕后,pattern就为:
re.compile(“”)中的做替换试试。发现还是[].
现在怎么办呢?方法很简单,一步一步的尝试。首先我匹配到:
<div
class
="pd-dload"
>
<a
pattern为
.zip,这里会出现问题。我很奇怪的一点是/w可以匹配数字,为什么这里匹配不出来呢?最后想到了匹配这样串的简单方法[/d/D]?,这样就包括了所有的情况.
/d是所有的数字,/d是所有的非数字。合起来就是全部的字符。最后的pattern为:
我想应该有更加简单的pattern才对.
如果想知道到某一个匹配的串的中的内容,可以这样写:例如
我希望能够找到 http://www.alliance3p.com,那应该怎么匹配呢?
f = open(‘XXX.txt’) content = f.read() m = re.search(‘
[/D/d]?<a[/D/d]?>([^”]+)‘,content,re.IGNORECASE) print(m.group(1))
f.close()
不过使用re.search就只能找到一行匹配的代码。对于要找到多行匹配的代码,可以使用findall(),然后再自己写代码掐头去尾好了。或者将找到的串在使用
re.search进行匹配。