温馨提醒:
import re 要导入正则模块
s=r'abc' r代表保留字符原义 ,不会被任何特殊方式处理 可以元字符简化 s=r'[a-c]'
re.findall(s,'abckkkkk') 返回匹配到s规则 字符列表
==================================
■ 字符匹配
● 普通字符 :字母、字符 匹配自己,如: a 匹配 a ,hello 匹配 hello
● 元字符:. ^ $ * + ? { } [ ] \ | ( )
◆ [ ] : a. 指定一个字符集 [abc]; [a-z]
b. 元字符在字符集不起作用,只相当于一个普通的符号 [abc$] 这时$只是一个美元符号
c. 补集匹配不在区间范围内的字符 [^34a] -- 表示不在34a 其中一个 取反 一定要字符集开头
在其他地方,就相当一人普通的^ 符号;
◆ ^ : 匹配行首,只匹配字符串的开始 ^world 只匹配 world开的 ,行中的不匹配
◆ $ : 匹配行尾,匹配字符串尾,或换行字符后面的任何位置 boy$ 只匹配boy结尾的字符串
◆ \ : a.取消元字符,使它成为普通的字符 \\ \{ \$ ……
b. 跟不同的字母有不同的意义(大写字母,具有取反的意思):
\d 匹配一个数字字符。等价于 [0-9]
\D 匹配一个非数字字符。等价于 [^0-9]
\s 匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]。
\S 匹配任何非空白字符。等价于 [^ \f\n\r\t\v]。
\w 匹配包括下划线的任何单词字符。等价于'[A-Za-z0-9_]'。
\W 匹配任何非单词字符。等价于 '[^A-Za-z0-9_]'。
◆ | : x|y 匹配 x 或 y。例如,'z|food' 能匹配 "z" 或 "food"。'(z|f)ood' 则匹配 "zood" 或 "food"。
◆ * : 匹配前面的子表达式零次或多次。例如,zo* 能匹配 "z" 以及 "zoo"。 * 等价于{0,}。zo*? 非贪婪匹配
◆ + : 匹配前面的子表达式一次或多次。例如,'zo+' 能匹配 "zo" 以及 "zoo",但不能匹配 "z"。+ 等价于 {1,}。zo+? 非贪婪匹配
◆ ? : 匹配前面的子表达式零次或一次。例如,"do(es)?" 可以匹配 "do" 或 "does" 中的"do" 。? 等价于 {0,1}。
◆ { } : a. {n} 是一个非负整数。匹配确定的 n 次。例如,'o{2}' 不能匹配 "Bob" 中的 'o',但是能匹配 "food" 中的两个 o。
b. {n,} n 是一个非负整数。至少匹配n 次。例如,'o{2,}' 不能匹配 "Bob" 中的 'o',但能匹配 "foooood" 中的所有 o。
'o{1,}' 等价于 'o+'。'o{0,}' 则等价于 'o*'。
c. {n,m} m 和 n 均为非负整数,其中n <= m。最少匹配 n 次且最多匹配 m 次。刘, "o{1,3}" 将匹配 "fooooood" 中的前三个 o。
'o{0,1}' 等价于 'o?'。请注意在逗号和两个数之间不能有空格。
"\d{3,4}-?\d{8}" 电话
■ 常用函数
● re.compile() 编译,这样速度会更快
r1=r"\d{3,4}-?\d{8}"
p_tel=re.compile(r1)
p_tel=findall('010-12345678')
p_tel=re.compile(r1,re.I) #不区分大小写
● match() search() findall() finditer() sub() subn() split()
● matchobject 对象 group() start() end() span()
■ 编译标志
● S :使 . 匹配包括换行在内的所有字符 针对正则表达
● I : 使匹配对大小写不敏感 针对字符串
● L :做本地化识别
● M:多行匹配 针对字符串
● X:正则本身多行书写 针对正则表达
s="""
hello work
ok
"""
re.findall(r"^hello",s,re.M)
tel=r"""
\d{3,4}
-?
\d{8}
"""
re.findall(tel,'010-12345678',re.X)
■ 分组 ( )
● 有或时,一般要用到 email=r"\w{3}@\w(\.com|\.cn)"
● 返回自己感兴趣的内容 (.*)
■ 爬虫
#!/usr/bin/python
import re
import urllib
def getHtml(url):
page=urllib.urlopen(url);
html= page.read()
return html
def getImg(html):
reg = r'src="(.+?\.jpg)" width'
imgre = re.compile(reg)
imglist = re.findall(imgre,html)
x=0
for imgurl in imglist:
urllib.urlretrieve(imgurl,'%s.jpg' % x)
x+=1