- import re
- str = 'this'
- text = 'this is test re'
- #s = re.match(text.str)同下效果一样
- #re.match与re.search的区别:re.match只匹配字符串的开始,
- #如果字符串开始不符合正则表达式,则匹配失败,
- #函数返回None;而re.search匹配整个字符串,直到找到一个匹配。
- s = re.search(text,str)
- #start()和end()可以获得匹配文本在字符串中的相应的索引
- a = match.start()
- b = match.end()
- #a.re.palltern = str;a.string = text
- print 'found "%s"\nin "%s"\nfrom %d to %d ("%s")' %(a.re.pattern,a.string,s,b,text[s:b])
- ########运行结果#########
- [root@localhost re]# python re1
- found "this"
- in "this is test re"
- from 0 to 4 ("this")
- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- \d 匹配任何十进制数;它相当于类 [0-9]。
- \D 匹配任何非数字字符;它相当于类 [^0-9]。
- \s 匹配任何空白字符;它相当于类 [ "t"n"r"f"v]。
- \S 匹配任何非空白字符;它相当于类 [^ "t"n"r"f"v]。
- \w 匹配任何字母数字字符;它相当于类 [a-zA-Z0-9_]。
- \W 匹配任何非字母数字字符;它相当于类 [^a-zA-Z0-9_]。
- + 匹配一个或者多个 一次或者多次
- 例子:和urllib模块配合获取当前路由器里面下载速度最快的前三名
- 路由用的是D-LINK,其他路由没试过,不知道能否成功
- import re
- import urllib
- #admin:123456是路由器的账号和密码,10.10.11.1是路由器的地址
- #后面这一节page=1&px=3&sf=1代表的是系统状态的内网监控
- url = 'http://admin:123456@10.10.11.1/analyze.cgi?page=1&px=3&sf=1'
- a = urllib.urlopen(url).read()
- #print(a)
- #findall接受2个参数,一个是匹配字符,一个是目标字符串,
- ip = re.findall('10\.10\.\d+\.\d+', a,re.M)
- ip1 = ip[0]
- ip2 = ip[1]
- ip3 = ip[2]
- print (ip1,ip2,ip3)
- ########运行结果#########
- [root@localhost re]# python luyou
- ('10.10.11.14', '10.10.11.121', '10.10.11.31')
.:匹配换行符以外的任何单个字符
*:匹配任意单个或者多个字符
+:匹配位于+之前的一个或者多个字符
|:匹配位于|之前的或者之后的的字符
^:匹配行首
$:匹配行尾
?:匹配单个字符
\:转义字符
[]:匹配位于[]中的任何一个字符
():将位于()内的内容当做一个整体
{}:按{}中的字数匹配
re.I:h忽略大小写。
re.L:格局本地是设置而更改\w,\b,\s,\W,\B,\S的匹配内容。
re.M:多行匹配
re.S:使用“.”元字符匹配换行符
re.U:匹配Unicode字符
re.X:忽略pattern中的空格,并且可以使用“#”注释