正则re模块--入门
本文来源:https://www.cnblogs.com/dyfblog/p/5880728.html
对字符串操作
1、应用:
当我们爬取的东西在js文件中,比如我爬今日头条美女的图片时,它的图片url,就在js中。
当我们处理普通的txt文本时。比如读取log日志
创建一个匹配Email的正则表达式
用该正则表达式去匹配用户的输入来判断是否合法
2、常用的正则
中文 [\u4e00-\u9fa5]
url ^(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$
匹配首尾空白字符的正则表达式 ^\s*|\s*$
匹配空白行的正则表达式 \n\s*\r
3.元字符
. 匹配任意字符(不包括换行符)包含空白符
^ 匹配开始位置,多行模式下匹配每一行的开始
$ 匹配结束位置,多行模式下匹配每一行的结束
* 匹配前一个元字符0到多次
+ 匹配前一个元字符1到多次
? 匹配前一个元字符0到1次
{n} 匹配前面元字符n次
{m,n} 匹配前一个元字符m到n次
\d 匹配一个数字, 相当于 [0-9]
\D 匹配非数字,相当于 [^0-9]
\s 匹配任意空白字符, 相当于 [ \t\n\r\f\v]
\S 匹配非空白字符,相当于 [^ \t\n\r\f\v]
\w 匹配数字、字母、下划线中任意一个字符, 相当于 [a-zA-Z0-9_]
\W 匹配非数字、字母、下划线中的任意字符,相当于 [^a-zA-Z0-9_]
\\ 转义字符,跟在其后的字符将失去作为特殊元字符的含义,例如\\.只能匹配.,不能再匹配任意字符
[] 字符集,一个字符的集合,可匹配其中任意一个字符
| 逻辑表达式 或 ,比如 a|b 代表可匹配 a 或者 b
(...) 分组,默认为捕获,即被分组的内容可以被单独取出,默认每个分组有个索引,从 1 开始,按照"("的顺序决定索引值
\A 匹配字符串开始位置,忽略多行模式
\Z 匹配字符串结束位置,忽略多行模式,就是如果最后换行了,他会匹配换行前的字符。
\b 匹配位于单词开始或结束位置的空字符串
\B 匹配不位于单词开始或结束位置的空字符串
\n 匹配一个换行符
\t 匹配一个制表符
(?:...) 分组的不捕获模式,计算索引时会跳过这个分组
(?P<name>...) 分组的命名模式,取此分组中的内容时可以使用索引也可以使用name
(?P=name) 分组的引用模式,可在同一个正则表达式用引用前面命名过的正则,和下面这个一起用
(?(id/name)yes|no) 若前面指定id或name的分区匹配成功则执行yes处的正则,否则执行no处的正则
4、模式
re.S DOTALL,此模式下 '.' 的匹配不受限制,可匹配任何字符,包括换行符
re.I IGNORECASE, 忽略大小写的匹配模式
re.M MULTILINE,多行模式, 改变 ^ 和 $ 的行为
re.X VERBOSE,冗余模式, 此模式忽略正则表达式中的空白和#号的注释,例如写一个匹配邮箱的正则表达式
正则表达式的模式是可以同时使用多个的,在 python 里面使用按位或运算符 | 同时添加多个模式
如 re.compile('', re.I|re.M|re.S)
5.内置对象
SRE_Pattern 这个对象是一个编译后的正则表达式,编译后不仅能够复用和提升效率,同时也能够获得一些其他的关于正则表达式的信息
属性:
- flags 编译时指定的模式
- groupindex 以正则表达式中有别名的组的别名为键、以该组对应的编号为值的字典,没有别名的组不包含在内。
- groups 正则表达式中分组的数量
- pattern 编译时用的正则表达式
SRE_Match 这个对象会保存本次匹配的结果,包含很多关于匹配过程以及匹配结果的信息
属性:
- endpos 本次搜索结束位置索引
- lastgroup 本次搜索匹配到的最后一个分组的别名
- lastindex 本次搜索匹配到的最后一个分组的索引
- pos 本次搜索开始位置索引
- re 本次搜索使用的 SRE_Pattern 对象
- regs 列表,元素为元组,包含本次搜索匹配到的所有分组的起止位置
- string 本次搜索操作的字符串
group([group1, ...]) 根据提供的索引或名字返回响应分组的内容,默认返回 start() 到 end() 之间的字符串, 提供多个参数将返回一个元组
groupdict([default=None]) 返回 返回一个包含所有匹配到的命名分组的字典,没有命名的分组不包含在内,key 为组名, value 为匹配到的内容,参数 default 为没有参与本次匹配的命名分组提供默认值
groups([default=None]) 以元组形式返回每一个分组匹配到的字符串,包括没有参与匹配的分组,其值为 default
6、常用
.*会尽量匹配的多,直到匹配不到为止
.*?就是说非贪婪,只要能不匹配,他就不匹配。
加了re.S,.就可以匹配任意包括换行
7、函数
re.compile(pattern, flags=0) :预编译,复用,regex
给定一个正则表达式 pattern,指定使用的模式 flags 默认为0 即不使用任何模式,(也可以加上re.S等模式)然后会返回一个 SRE_Pattern regex = re.compile(".+"),
这个对象可以调用其他函数来完成匹配,一般来说推荐使用 compile 函数预编译出一个正则模式之后再去使用,这样在后面的代码中可以很方便的复用它,当然大部分函数也可以不用 compile 直接使用。
re.findall(pattern, string, flags=0),也可以用regex.findall()调用
参数 pattern 为正则表达式, string 为待操作字符串, flags 为所用模式,函数作用为在待操作字符串中寻找所有匹配正则表达式的字串,返回一个列表,如果没有匹配到任何子串,返回一个空列表。
re.match()和re.search(),也可以regex.match调用,尽量用search
match(pattern, string, flags=0) ,从字符串开始处开始,寻找可以匹配上模式的子串, 返回匹配上的第一个字串,并且不再继续找,如果开始处不匹配,则不再继续寻找,找不到时返回 None。match(pattern, string, flags=0) 返回值为 一个 SRE_Match 对象。
search(pattern, string, flags=0) 函数类似于 match,不同之处在于不限制正则表达式的开始匹配位置,返回值为 一个 SRE_Match 对象。
8.分组
捕获分组和不捕获分组:差别就是,是否缓存
下面的例子来自知乎:要在一篇文章中查找"program"和"project"两个单词,正则表达式可表示为/program|project/,也可表示为/pro(gram|ject)/,但是缓存子匹配(gramject)没有意义,就可以用/pro(?:gram|ject)/进行非捕获性匹配这样既可以简洁匹配又可不缓存无实际意义的字匹配。 作者:冰冻三寸
正则re模块--入门的更多相关文章
- Nginx开发HTTP模块入门
Nginx开发HTTP模块入门 我们以一个最简单的Hello World模块为例,学习Nginx的模块编写.假设我们的模块在nginx配置文件中的指令名称为hello_world,那我们就可以在ngi ...
- Python模块(三)(正则,re,模块与包)
1. 正则表达式 匹配字符串 元字符 . 除了换行 \w 数字, 字母, 下划线 \d 数字 \s 空白符 \n 换行符 \t 制表符 \b 单词的边界 \W \D \S 非xxx [ ...
- Request模块入门学习
使用指令npm install --save request来安装模块,然后使用var request = require('request')完成引用. 对于GET请求,主要是获取目的url中数据. ...
- 日志(logging)与正则(re)模块
logging模块 #日志:日常的流水 =>日志文件,将程序运行过程中的状态或数据进行记录,一般都是记录到日志文件中 #1.logging模块一共分为五个打印级别 debug.info.warn ...
- python正则--re模块常用方法
前面几篇关于正则匹配的文章我用的方法都只有一个re.search 但其实正则re模块提供很多非常好用的方法,我们先来看看re模块都有那些属性方法呢 前面的一堆带_或者大写的就不关注了,主要关注最后面的 ...
- 正则 re模块
Python 正则表达式 re 模块 简介 正则表达式(regular expression)是可以匹配文本片段的模式.最简单的正则表达式就是普通字符串,可以匹配其自身.比如,正则表达式 ‘hello ...
- python的正则re模块
一. python的正则 python的正则模块re,是其内置模块,可以直接导入,即import re.python的正则和其他应用的正则及其相似,有其他基础的话,学起来还是比较简单的. 二. 正则前 ...
- python正则re模块
今日内容: 知识点一:正则 什么是正则: 就是用一系列具有特殊含义的字符组成一套规则,改规则用来描述具有某一特征的字符串 正则就是用来在一个大的字符串中取出符合规则的小字符串 为什么用正则: ...
- argparse模块入门介绍——基于python3.7
转载:https://blog.csdn.net/weixin_41796207/article/details/80846406 首先说明,本人是想要学习如何使用argparse模块,打造命令行程序 ...
随机推荐
- vue-cli3构建多页面应用2.0
1.0版本点这里 -> 博客:vue-cli3构建多页面应用1.0 github:vue-cli-multipage 在1.0版本上做了以下改进: 1. 增加pages.config.js, ...
- struts2 404错误
action类必须放在xxxx.xxx.xxx.xxx.action 包下才可以.
- 字符串匹配问题x
qwq这个是栈的w 不是树w qwq我承认我发题很杂啦 字符串匹配问题x [问题描述] 字符串中只含有括号 (),[],<>,{},判断输入的字符串中括号是否匹配 ...
- lua.c:82:10: fatal error: readline/readline.h: No such file or directory #include <readline/readline.h>
make linuxcd src && make linuxmake[1]: Entering directory `/root/lua/lua-5.3.2/src'make all ...
- Win10 下载 masmplus
一.下载: masmplus链接: http://www.aogosoft.com/masmplus/
- JAVA基础知识|HTTP协议-发展历程
HTTP 是基于 TCP/IP 协议的应用层协议.它不涉及数据包(packet)传输,主要规定了客户端和服务器之间的通信格式,默认使用80端口. 此文章为转载内容:http://www.ruanyif ...
- canvas实现水印
最近遇到一个需求,给所有页面加水印(登录人),不影响其他点击等功能的使用,目的是防止信息外漏,当时就在想:这年头,PS就不说人人都能使用,谁手机还没个涂鸦功能,防不了,但是就是这么个需求,那就实现吧! ...
- Netfilter 之 连接跟踪初始化
基础参数初始化 nf_conntrack_init_start函数完成连接跟踪基础参数的初始化,包括了hash,slab,扩展项,GC任务等: int nf_conntrack_init_start( ...
- java读取XML文件,及封装XML字符串
package com.yyl.text; import java.io.FileInputStream; import java.util.ArrayList; import org.junit.T ...
- ios-Runtime调用私有方法
有时在代码中会有需要调用私有方法的场景,如不想import太多头文件:想组件设计一些解耦的模块:查看别人模块中未暴露的代码进行分析等. 在 ios 中调用私有方法有很多种方式,主要是通过Runtime ...