Python正则表达式 学习笔记
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$', '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:抓取图片内容并把存到本地
                    
                
                
            
        
浙公网安备 33010602011771号