python爬虫——提取抓取内容(1)正则表达式解析

一.为什么引入正则表达式?

  • 用来匹配一类具有相同规则的字符串

二.正则表达式规则

1. 单字符

符号 含义
. 除换行以外的所有字符
[] [aoe]表示a.o.e任意一个;[a-w]表示a-w之间任意一个
\d 数字 [o-9]表示0-9
\D 非数字
\w 字母,数字,下划线,中文
\W 所有非\w
\s 所有的空白字符
\S 非空白字符

2.数量修饰(控制数量)

符号 含义
* 人一多次      ~~~~      >=0
+ 至少一次      ~~~~     >=1
? 可有可无      ~~~~      0或1次
{m} 固定m次
{m,} 至少m次
{m,n} m-n次

3.边界

字符 含义
\b
\B
$ 以某某结尾
^ 以某某开头

4.分组(正则的高级功能)

     ~~~~     4.1 (){数字} :视为一个整体ab{4}表示abbbb,(ab){4}表示abababab

     ~~~~     4.2 子模式\组模式

import re

string = '

开心

'
pattern = re.compile(r'<(\w+)><(\w+)>\w+') ret = pattern.search(string) print(ret)

python爬虫——提取抓取内容(1)正则表达式解析_第1张图片

import re

string = '

开心

'
pattern = re.compile('<(\w+)><(\w+)>\w+<(/\w+)><(/\w+)>') ret = pattern.search(string) print(ret)

python爬虫——提取抓取内容(1)正则表达式解析_第2张图片

5.贪婪模式

.*
实例

import re

string = '
喜气洋洋过大年!
' pattern = re.compile(r'
.*
'
) ret = pattern.search(string) print(ret)

python爬虫——提取抓取内容(1)正则表达式解析_第3张图片
.+

import re

string = '
恭喜发财,鼠年大吉!
' pattern = re.compile(r'
.+
'
) ret = pattern.search(string) print(ret)

python爬虫——提取抓取内容(1)正则表达式解析_第4张图片
加个问号‘?’就可以取消贪婪模式
.*?

import re

string = '
喜气洋洋过大年!
' pattern = re.compile(r'
.*?
'
) ret = pattern.search(string) print(ret)

python爬虫——提取抓取内容(1)正则表达式解析_第5张图片
.+?

import re

string = '
鼠年大吉
' pattern = re.compile(r'
.+?
'
) ret = pattern.search(string) print(ret)

|python爬虫——提取抓取内容(1)正则表达式解析_第6张图片

6.re模块修饰符

修饰符 含义
re.I 忽略大小写
re.M 多行匹配
re.S 单行匹配

re.M实例:匹配多行,以love开头

import re

string = """I love you.
love aaa
love bbb"""

pattern = re.compile(r'^love', re.M)
ret = pattern.findall(string)
print(ret)

python爬虫——提取抓取内容(1)正则表达式解析_第7张图片

7.正则练习

     ~~~~     7.1 匹配整首诗

import re

string1 = """
锄禾 锄禾日当午, 汗滴禾下土。 谁知盘中餐, 粒粒皆辛苦。
"""
pattern = re.compile(r'
(.*?)
'
, re.S) ret = pattern.findall(string1) print(ret)

python爬虫——提取抓取内容(1)正则表达式解析_第8张图片

8.match()、search()、findall()函数

match是从头开始匹配
search是从任意位置找
findall是找所有的

9.re.sub()函数(正则替换)

     ~~~~      9.1格式
         ~~~~~~~~         re.sub(正则表达式,替换内容,字符串):在字符串中查找正则匹配的内容替换为‘替换内容’
     ~~~~      9.2案例一
方法一:

import re

string2 = 'I love you,you love me!'
pattern = re.compile(r'love')
ret = pattern.sub('hate', string2)
print(ret)

python爬虫——提取抓取内容(1)正则表达式解析_第9张图片
方法二:

import re

string2 = 'I love you,you love me!'
# pattern = re.compile(r'love')
ret = re.sub(r'love', 'hate', string2)
print(ret)

python爬虫——提取抓取内容(1)正则表达式解析_第10张图片
     ~~~~      9.3案例二

import re


def fn(a):
    ret = int(a.group())
    return str(ret-10)


string2 = '我喜欢身高172的女孩子'
pattern = re.compile(r'\d+')
ret = pattern.sub(fn, string2)
print(ret)

python爬虫——提取抓取内容(1)正则表达式解析_第11张图片

你可能感兴趣的:(python爬虫)