200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > Python 网络爬虫笔记6 -- 正则表达式

Python 网络爬虫笔记6 -- 正则表达式

时间:2021-11-13 18:45:57

相关推荐

Python 网络爬虫笔记6 -- 正则表达式

Python 网络爬虫笔记6 – 正则表达式

Python 网络爬虫系列笔记是笔者在学习嵩天老师的《Python网络爬虫与信息提取》课程及笔者实践网络爬虫的笔记。

课程链接:Python网络爬虫与信息提取

参考文档:

Requests 官方文档(英文)

Requests 官方文档(中文)

Beautiful Soup 官方文档

re 官方文档

Scrapy 官方文档(英文)

Scrapy 官方文档(中文)

一、正则表达式

1、介绍

正则表达式,又称规则表达式(英语:Regular Expression,在代码中常简写为regex、regexp或RE)。正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本。

2、基础语法

贪婪匹配与最小匹配:默认为贪婪匹配,加上?就可以实现最小匹配。

3、经典正则化表达式实例

# 由26个字母组成的字符串^[A‐Za‐z]+$# 由26个字母和数字组成的字符串^[A‐Za‐z0‐9]+$# 整数形式的字符串^‐?\d+$# 正整数形式的字符串^[0‐9]*[1‐9][0‐9]*$# 中国境内邮政编码,6位[1‐9]\d{5}# 匹配中文字符[\u4e00‐\u9fa5]# 国内电话号码,010‐68913536\d{3}‐\d{8}|\d{4}‐\d{7}# IP地址字符串, 0‐99: [1‐9]?\d 100‐199: 1\d{2} 200‐249: 2[0‐4]\d 250‐255: 25[0‐5](([1‐9]?\d|1\d{2}|2[0‐4]\d|25[0‐5]).){3}([1‐9]?\d|1\d{2}|2[0‐4]\d|25[0‐5])

二、re 库

1、基础

导入:

# python自带re库,不需要安装import re

raw string 类型:

raw string类型:原生字符串类型,不需要转义字符来表示特殊字符re库采用raw string类型表示正则表达式

# 通用格式,在字符串前加 rr'regex'# 示例,不会对\进行转义r'[1‐9]\d{5}'r'\d{3}‐\d{8}|\d{4}‐\d{7}'

2、re 库函数

函数表:函数在内部会对正则表达式进行编译再匹配

参数

pattern:正则表达式的字符串或原生字符串表示string:待匹配字符串flags:正则表达式使用时的控制标记 re.I re.IGNORECASE:忽略正则表达式的大小写,[A‐Z]能够匹配小写字符re.M re.MULTILINE:正则表达式中的^操作符能够将给定字符串的每行当作匹配开始re.S re.DOTALL:正则表达式中的.操作符能够匹配所有字符,默认匹配除换行外的所有字符 maxsplit:最大分割数,剩余部分作为最后一个元素输出repl:替换匹配字符串的字符串count:匹配的最大替换次数

返回:Match对象

示例:

import redef re_func():"""re 库函数使用"""string = 'HIT123456 SZ666666'# search函数match1 = re.search(r'[1-9]\d{5}', string)if match1:# Match对象的属性和方法print('-'*20)print(match1.group(0))print(match1.string)print(match1.re)print(match1.pos)print(match1.endpos)print(match1.start())print(match1.end())print(match1.span())print('-'*20)# match 函数match2 = re.match(r'[1-9]\d{5}', string)if match2:print(match2.group(0))# findall函数ls1 = re.findall(r'[1-9]\d{5}', string)print(ls1)# split函数ls2 = re.split(r'[1-9]\d{5}', string, maxsplit=1)print(ls2)# finditer函数for m in re.finditer(r'[1-9]\d{5}', string):if m:print(m.group(0))# sub函数res = re.sub(r'[1-9]\d{5}', 'number', string)print(res)if __name__ == '__main__':print('running regex')re_func()

3、pile()

显式编译正则表达式,再匹配可以使用re库中的6种匹配函数

# 使用格式正则表达式编译后的对象.函数名()# 示例pat = pile(r'[1-9]\d{5}')print(pat.search(string).group(0))

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。