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正则表达式语法
字符 |
匹配 |
. |
匹配任意字符(除了\n) |
[...] |
匹配字符集 |
\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 / \Z |
指定的字符串必须穿现在开头/结尾 |
示例:
import re
ma = re.match(r‘^[\w]{4,10}@163.com$‘, ‘[email protected]‘)
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‘, ‘[email protected]‘)
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:抓取图片内容并把存到本地