05、Python爬虫之正则表达式常用方法(超全)
文章目录
- 前言
- 一、search()函数
- 二、match()函数
- 三、compile()函数
- 四、findall()函数
- 五、sub()函数
- 六、subn()函数
- 七、split()函数
- 八、补充说明
- 总结
前言
最近忙得焦头烂额,上篇总结完正则表达式的基础后,本想在几天内把正则表达式的常用方法给补上,奈何计划赶不上变化(๑˙_˙๑)
(面瘫中。。。)。废话不多说,码字开始。
应用下面方法记得导入re模块 import re
关键字:正则表达式方法
一、search()函数
re.search(pattern,string,[flags])
参数说明
- pattern : 表示模式字符串,由要匹配的正则表达式转换而来
- string :表示要匹配的字符串
- flags:可选参数,表示修饰符,用于控制匹配方式,如是否区分字母大小写
功能 | 示例 |
---|---|
搜索第一指定字符的开头的字符串 |
import re pattern = ‘you_\w+’ #模式字符串 string = ‘YOU_CAN you_can’ string = ‘句子YOU_CAN you_can’ |
可选匹配字符串中的内容 |
import re pattern = ‘(\d?)+mrsoft\s?([\u4e00-\u9fa5]?)+’ match = re.search(pattern,‘01mrsoft’) print(match) #返回<re.Match object; span=(0, 8), match=‘01mrsoft’> match = re.search(pattern,‘mrsoft’) print(match) #返回<re.Match object; span=(0, 6), match=‘mrsoft’> match = re.search(pattern,'mrsoft ') print(match) #返回<re.Match object; span=(0, 7), match='mrsoft '> match=re.search(pattern,‘mrsoft第一’) print(match) #返回<re.Match object; span=(0, 9), match=‘mrsoft 第一’> match = re.search(pattern,‘rsoft 第一’) print(match) #返回None |
使用"\b"匹配字符串的边界 |
import re #表达式,my两侧均有边界 pattern = r’\bmy\b’ #my右侧不是边界,而是soft,匹配失败 match = re.search(pattern,‘mysoft’) print(match) #输出None #my左侧为边界,右侧为空格,匹配成功 match = re.search(pattern,‘my soft’) print(match) #输出<re.Match object; span=(0, 2), match=‘my’> #my左侧为空格,右侧为soft,匹配成功 match = re.search(pattern,’ mysoft ') print(match) #输出None #my左侧为边界,右侧为".",匹配成功 match = re.search(pattern,‘my.soft’) print(match) #输出<re.Match object; span=(0, 2), match=‘my’> |
PS_1: 有关于 ‘(\d?)+mrsoft\s?([\u4e00-\u9fa5]?)+’
(\d?)+表示多个数字可有可无;\s表示空格可有可无,([\u4e00-\u9fa5]?)+表示多个汉字可有可无
PS_2:pattern中出现r[xxxx]前面的r是什么意思?
r表示原生字符串,该字符串声明了引用的内容表示该内容的原始含义,避免多次转义达成的反斜杠的困扰
二、match()函数
有关于match()函数的介绍,结合search()函数来进行对比认识
match()函数 | search()函数 | |
---|---|---|
功能 | match()函数试图从字符串的起始部分对模式进行匹配。如果匹配成功则返回MatchObject对象实例,如果不是起始位置,则返回None | re.search()函数则扫描整个字符串并返回第一个成功的匹配,匹配成功re.search方法则返回MatchObject对象的实例,否则返回None |
示例 |
三、compile()函数
re.compile()函数用于编译正则表达式,生成一个正则表示式(pattern)对象,供match()和search()这两个函数使用----更多的是给findall()函数使用
示例如下:
import restr_val = 'Hi,Welcome to China,I love python.'
mycompile = re.compile('\w*o\w*')
str_list = mycompile.findall(str_val)
print(str_list)
输出:[‘Welcome’, ‘to’, ‘love’, ‘python’]
四、findall()函数
re.findall(pattern,string,[flags])
参数说明
- pattern:表示模式字符串,由要匹配的正则表达式转换而来。
- string: 表示要匹配的字符串。
- flags:可选参数,表示修饰符,用于控制匹配方式,如是否区分字母大小写
功能 | 示例 |
---|---|
匹配所有以指定字符串开头的字符串 |
import re pattern = ‘you_\w+’ #模式字符串 string = ‘YOU_CAN you_can’ #要匹配的字符串 #不区分大小写搜索,返回[‘YOU_CAN’, ‘you_can’] match = re.findall(pattern,string,re.I) print(match) string = ‘句子YOU_CAN you_can’ #区分大小写的方式搜索,返回[‘you_can’] match = re.findall(pattern,string) print(match)` |
使用".*"实现贪婪匹配字符串 |
pattern=‘http://.*/’ #表达式,使用".*"获取www.baidu123.com match=re.findall(pattern,‘https://www.baidu123.com/’ #返回[‘https://www.baidu123.com/’] |
单独获取" .* "所匹配的中间内容 |
pattern=‘http://(.*)/’ #表达式,使用".*"获取www.baidu123.com match=re.findall(pattern,‘https://www.baidu123.com/’ #返回[‘www.baidu123.com/’] |
使用“ .*? "实现非贪婪匹配字符串 |
pattern=‘http://.*?(\d+).com/’ #表达式,使用".*?"获取www.baidu123.com match=re.findall(pattern,‘https://www.baidu123.com/’ #返回[‘123’] |
五、sub()函数
re.sub(pattern,repel,string,count,flags)
参数说明
- pattern:表示要替换的模式字符串,由要匹配的正则表达式转换而来
- string:表示要被查找替换的原始字符串
- count:可选参数,表示模式匹配后替换的最大次数,默认值为0,表示替换所有的匹配。
- flags:可选参数,表示修辞符,用于控制匹配方式,如是否区分字母大小写
功能 | 示例 |
---|---|
替换字符串 |
import re pattern=r’1[3457]\d{9}' #定义要匹配的字符串 string = ‘你好,联系电话为138222222223’ #返回你好,联系电话为1XXXXXXXXXXX result = re.sub(pattern,‘1XXXXXXXXXXX’,string) print(result) |
删除字符串中的所有字母 |
import re string = ‘abcd10efg0hiji8lmn6opq’ #需要匹配的字符串 pattern = “[a-z]” #表达式 #匹配字符串,所有字母替换为空,并忽略大小写 match = re.sub(pattern,‘’,string,flags=re.I) print(match) 输出10086 |
六、subn()函数
功能 | 示例 |
---|---|
替换字符串并返回替换数量 |
string = “Nice to meet you, John. Nice to meet you,too,Mary.John,what a great weather!” pattern = “John” #表达式 match = re.subn(pattern,“Mackle”,string) #匹配字符串,将所有的John替换为Mackle,并统计替换次数 print(match) #输出 (‘Nice to meet you, Mackle. Nice to meet you,too,Mary.Mackle,what a great weather!’ ,2) print(match[1]) #输出2 |
七、split()函数
re.split(pattern, string, [maxsplit], [flag])
参数说明
- pattern : 表示模式字符串,由要匹配的正则表达式转换而来
- string :表示要匹配的字符串
- maxsplit : 可选参数,表示最大的拆分次数。
- flags:可选参数,表示修饰符,用于控制匹配方式,如是否区分字母大小写
功能 | 示例 |
---|---|
分割字符串 |
pattern = r’[?|&] #定义分割字符 url=“https://weibo.com/newlogin?tabtype=weibo&gid=10280356” result = re.split(pattern,url) #返回[‘https://weibo.com/newlogin’,‘tabtype=weibo’,‘gid=10280356’] |
设置最大分割次数 |
string=“Python|爬虫|之|正则|表达式” pattern=‘\|’ #表达式 match = re.split(pattern,string,maxsplit=1) #通过第一次出现的 | 进行分割。返回['Python|‘,’爬虫|'之|正则|表达式‘ ] |
八、补充说明
现在开始对上面遗漏的知识点进行填坑,在参数设置中,有一个flags参数
flags:可选参数,表示修饰符,用于控制匹配方式
修饰符 | 描述 |
---|---|
re.I | (IGNORECASE)使匹配忽略大小写 |
re.L | (LOCAL)做本地化识别匹配,影响"w,"W,"b,和"B |
re.M |
(MULTILINE)多行匹配,影响 ^ 和 $ 。使用此标志后,^和$ 匹配行首和行尾时,会增加换行符之前和之后的位置
|
re.S | (DOTALL)使匹配包括换行在内的所有字符 |
re.U | 根据Unicode字符集解析字符。这个标志影响 \w, \W, \b, \B. |
re.X | (VERBOSE)当指定该标志时,空白符会被忽略,除非其在字符类中或者反斜杠后。它可以允许你将注释写入RE,这些注释会被忽略。该标志通过给予你更灵活的格式以便你将正则表达式写得更易于理解。 |
总结
本文详细的介绍了学习Python爬虫时,re模块可能用到的一些函数方法。有关于Python正则表达式的完整内容学习,可结合上一篇文章04、Python爬虫之正则表达式基础(超全) 一起学习,以便理解pattern的编写。
如有错误的地方,恳请指正,不胜感谢,下篇再会。
05、Python爬虫之正则表达式常用方法(超全)相关推荐
- python excel库pip install_超全整理|Python 操作 Excel 库 xlwings 常用操作详解!
原标题:超全整理|Python 操作 Excel 库 xlwings 常用操作详解! 来源:早起Python 作者:陈熹.刘早起 大家好,我是早起. 在之前的文章中我们曾详细的讲解了如何使用openp ...
- Python爬虫:正则表达式?就这
前言 当你点开文章的时候,我就知道这次的标题有点装逼了,哈哈,不过不要紧,还好我写的都是干货. 正则表达式是处理字符串的强大工具,它有自己特定的语法结构,可以实现字符串的检索.替换.匹配验证. 案例引 ...
- Task 05 Python 爬虫入门
1.Requests简介 Requests是一款目前非常流行的http请求库,使用python编写,能非常方便的对网页Requests进行爬取,也是爬虫最常用的发起请求第三方库. 安装方法 pip i ...
- Python安装第三方库常用方法 超详细~
Python安装第三方库常用方法 前言 安装方法 1. 通过pychram安装 2. pip安装大法 3. 下载whl文件到本地离线安装 3.1 补充 4.其他方法 4.1 Python官方的Pypi ...
- Python全栈开发-Python爬虫-03 正则表达式详解
正则表达式 一. 什么是正则表达式 正则表达式,又称规则表达式,通常被用来检索.替换那些符合某个模式(规则)的文本. 正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符.及这些特定 ...
- Python 爬虫统计影评,超详细(按照步骤弄不出来杀楼主祭天)
在学习网络爬虫之前,先看一下完成效果吧,勾起大家的学习兴趣 图片中显示的文字,正是爬取的豆瓣电影中第一个正在热播的电影的评价中出现的高频词汇 是不是很有学习兴趣呀?准备开始Python的学习之旅吧,在 ...
- python爬虫详细步骤-Python爬虫实践入门,超详细
1.前言 学习Python二个多月啦,周末时开始兴趣学习爬虫,虽然有点概念,但是也折腾了大半天,下面就开始简要记录一下吧. 2.需要的准备 Python:需要基本的python语法基础 request ...
- python爬虫之 ---------------- 正则表达式(1)
正则表达式 正则表达式简历: 正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配. 在python中通过内置的re库来使用正则表达式,它提供了所有正则表达式的功能. re ...
- python爬虫之正则表达式-1
基础知识了解下先,各位: 1.正则表达式的常用符号 . 可以匹配任意字符,换行符\n除外 * 匹配前一个字符0次或无限次 ? 匹配前一个字符0次或1次 .* 贪心算法 .*? 非贪心算法 () ...
最新文章
- 报名 | AI Time :论道AI安全与伦理
- ruby简单的基础 4
- Prototype1.5.1源代码解读分析-5
- jersey球衣是什么_球衣知识------关于NIKE球衣(Jersey)的介绍
- WinPcap笔记(9):保存数据包到堆文件
- L2C中CtempGen层语义保持证明中环境匹配的定义
- (13)FPGA设计思想
- 剑指offer面试题[5]-从尾到头打印链表
- Asp.net 安装包制作
- 超详细用实验教你如何配置OSPF
- 50 个实用小工具(图片处理、截屏录屏、格式转化、下载工具、浏览器、工具箱等)
- php读取月日,PHP获取当前时间、年份、月份、日期和天数
- fit函数中verbose含义解释
- 2021年美妆护肤行业电商营销报告
- matlab光学几何光学模拟,matlab在几何光学仿真 实验中的应用.doc
- mybatis countByExample Total: 1 返回 0
- STM32 HAL库之USB
- java tailer apache_工具类commons-io的Tailer用来监控文件
- ai作文批改_AI能批改英语作文了 专业度堪比高考阅卷老师 可自动批改雅思、四六级英语作文...
- python字符串正向递增_Python字符串基础知识
热门文章
- C# 检验身份证号并提取生日和性别
- SCA编程模型与传统的编程模型的区别
- OpenCV OAK-D-W广角相机测试
- 【BUUCTF】bjdctf_2020_babystack Write Up
- 南师大计算机语言学研究生学费,南京师范大学有没有非全日制研究生?学费又是多少?...
- 华硕电脑(ROG 幻15为例)重装系统(游戏本风扇声音过大+发热严重问题)
- [老齐的求职攻略] 第六章 试用期生存指南
- 盲打助手(Touch-Typing) 1.0 正式版 (下载)
- 【matplotlib】 移动平均(Moving Average)
- discuz论坛数据表中文对照表