python第一个正则表达式
1. import re : python正则表达式模块
2. 第一个正则表达式
re.compile(r'imooc')
pattern.match('imooc python')
示例:
import re
pa = re.compile(r'imooc') #返回一个Pattern类型对象pa
ma = pa.match('imooc python') #返回一个match对象ma
print ma.group() #获得匹配结果
print ma.span() #获得匹配区间
print ma.string #匹配字符串
print ma.re #pattern对象
pa = re.compile(r'imooc', re.I) # I == ignore,忽略大小写地匹配
ma = pa.match('iMoOc python')
print ma.group()
pa = re.compile(r'(imooc)') #加入小括号,放到group里
ma = pa.match('imooc python')
print ma.groups()
ma = re.match(r'imooc', 'imooc python') #直接匹配
print ma.group()
Python正则表达式语法
字符
|
匹配
|
.
|
匹配任意字符(除了
)
|
[...]
|
匹配字符集
|
d / D |
匹配数字/非数字
|
s / S
|
匹配空白/非空白字符
|
w / W
|
匹配单词字符[a-zA-Z0-9]/非单词字符 |
单字符匹配示例:
import re
ma = re.match(r'.', 'abc0')
print ma.group()
ma = re.match(r'{[abc]}', '{b}')
print ma.group()
ma = re.match(r'[a-z]', 'a')
print ma.group()
ma = re.match(r'[[w]]', '[a]')
print ma.group()
字符
|
匹配
|
*
|
匹配前一个字符0次或无限次
|
+
|
匹配前一个字符1次或无限次
|
?
|
匹配前一个字符0次或1次
|
{m} / {m.n}
|
匹配前一个字符m次到n次
|
*? / +? / ??
|
匹配模式变为非贪婪(尽可能少匹配字符)
|
示例:
# -*- coding: utf-8 -*-
import re
ma = re.match(r'[A-Z][a-z]*', 'Aa')
print ma.group()
ma = re.match(r'[_a-zA-z]+[_w]*', '_helloWorld01') #匹配一个变量名
print ma.group()
ma = re.match(r'[0-9]?[0-9]', '28') #匹配0到99
print ma.group()
边界匹配
字符
|
匹配
|
^
|
匹配字符串开头
|
$
|
匹配字符串结尾
|
A /
|
指定的字符串必须穿现在开头/结尾
|
示例:
import re
ma = re.match(r'^[w]{4,10}@163.com$', 'imooc@163.com')
print ma.group()
ma = re.match(r'Aimooc[w]*', 'imooc python')
print ma.group()
分组匹配
字符
|
匹配
|
|
|
匹配左右任意一个表达式
|
(ab)
|
括号表达式作为一个分组
|
<number>
|
引用编号为num的分组匹配到的字符串
|
(?P<name>)
|
分组起一个别名
|
(?P=name)
|
引用别名为name的分组匹配字符串 |
示例:
# -*- coding: utf-8 -*-
import re
ma = re.match(r'[0-9]?d$|100', '100') #匹配0到100
print ma.group()
ma = re.match(r'[w]{4,6}@(163|126).com', 'imooc@126.com')
print ma.group()
ma = re.match(r'<([w]+>)1', '<book>book>')
print ma.group()
ma = re.match(r'<([w]+>)[w]+</1', '<book>python</book>') #
print ma.group()
ma = re.match(r'<(?P<mark>[w]+>)[w]+</(?P=mark)', '<book>python</book>')
print ma.group()
re模块的其他方法
1:search(pattern, string, flags=0)
在一个字符串中查找匹配
2:findall(pattern, string, flags=0)
找到匹配,返回所有匹配部分的列表
3:sub(pattern, repl, string, count, flags=0)
将字符串中匹配正则表达式的部分替换为其他值
4:split(pattern, string, maxsplit=0, flags=0)
根据匹配分割字符串,返回分割字符串组成的列表
示例:
import re
pa = re.compile('<[w]+>')
ma = re.search(pa, '<a><b><c><d><efg>h<i>')
print ma.group()
pa = re.compile('<[w]+>')
L = re.findall(pa, '<a><b><c><d><efg>h<i>')
print L
s = re.sub(r'd+', '2016', 'I was born in 1993')
print s
def add1(match): # repl位函数的sub函数
val = match.group()
num = int(val)+1
return str(num)
s = re.sub(r'd+', add1, 'I was born in 1993, you are born in 1992')
print s
l = re.split(r':| |,', 'imooc:C C++ Java Python,C#')
print l
练习
抓取网页中的图片到本地
1:抓取网页
2:抓取图片地址
3:抓取图片内容并把存到本地