基础的正则表达式与re模块(2)
一、元字符
字符组是元字符中的一个。在字符组中所有的字符都可以匹配任意一个字符位置上能出现的内容,如果在字符串中有任意一个字符是字符组中的内容,那么就是匹配上的项。
[0-9] [a-z] [A-Z] ascii编码小的值,指向一个大的值
# \d表示匹配一个数字 [0-9]
元字符:
\w word匹配字母和数字、下划线 \d digit \s space \n next \t tab \W \D \S
^开始 $结尾 \b 匹配边界
[] [^] 字符组相关的
| 或
() 分组
. 匹配除了换行符之外的任意字符
二、量词
?0次或1次,+1次或多次 *0次或多次 {n}n次 {n,}n次或多次 {n,m}n次或m次
\d+整数
\d+\.\d+ 小数
\d+\.\d+|\d+ 整数或者小数 \d+(\.\d+)?
# 贪婪匹配 : 正则会尽量多的帮我们匹配
# 默认贪婪 回溯算法
# 非贪婪匹配 :会尽量少为我们匹配
# 量词?表示非贪婪 惰性匹配
# .*?x 表示匹配任意长度任意字符遇到一个x就立即停止
元字符注意事项: 元字符 量词
元字符 量词 ? 在量词的范围内尽量少的匹配这个元字符
分组 对某些固定的内容做量词约束
或 把长的放前面
转义符
pattern = r'\\n'
s = r'\n'
转义:使用 \或r转义
三、re模块
3.1 findall
import re
# findall
ret = re.findall('\d+','SGY93SHD2183Y0')
print(ret)
结果:
['', '', '']
参数 正则表达式 待匹配的字符串
返回值 是一个列表 所有匹配到的项
没有匹配到会返回一个空列表
如果遇到分组,findall会优先显示分组中的内容
(?:正则表达式)取消分组优先
3.2 search
import re
# search
ret = re.search('\d+','SGY93SHD2183Y0')
print(ret)
print(ret.group())
结果:
<_sre.SRE_Match object; span=(3, 5), match=''> # 对象
93
返回值 : 返回一个SRE_Match对象 ,没有匹配到会返回None,没有.group()方法。如果有分组,通过索引取各分组中的内容
通过group去取值
且只包含第一个匹配到的值
findall 有个特点,会优先显示分组中的内容。优先前面的
import re
ret = re.findall('(www)\.(baidu|oldboy)\.(com)','www.baidu.com')
print(ret) # [('www', 'baidu', 'com')]
search的特点:
import re
ret = re.search('(www)\.(baidu|oldboy)\.(com)', 'www.baidu.com')
print(ret.group(0)) # www.baidu.com
print(ret.group(1)) # www
print(ret.group(2)) # baidu
print(ret.group(3)) # com
match 验证用户输入的内容
ret = re.match('\d+','25ahs293djjk293sahf2938u')
print(ret) # <_sre.SRE_Match object; span=(0, 2), match='25'>
print(ret.group()) # 25
查看字符串开始位置的数字是多少,索引分别是多少。
分割split的用法
import re
s = 'alex8123egon1120boss_jin'
ret = re.split('\d+',s)
print(ret) # ['alex', 'egon', 'boss_jin'] ret = re.split('(\d+)',s) # (\d)+ \d\d\d\d\d...(\d)
print(ret) # ['alex', '8123', 'egon', '1120', 'boss_jin'] ret = re.split('\d(\d)',s)
print(ret) # ['alex', '1', '', '3', 'egon', '1', '', '0', 'boss_jin']
替换sub
s = 'alex|egon|boss|jin'
print(s.replace('|','')) # alexegonbossjin s1 = 'alex8123egon1120boss_jin626356'
ret = re.sub('\d+','|',s1)
print(ret) # alex|egon|boss_jin| ret = re.sub('\d+','|',s1,1)
print(ret)
#alex|egon1120boss_jin626356 替换一次 ret = re.subn('\d+','|',s1)
print(ret) # ('alex|egon|boss_jin|', 3) 元组,并显示次数
compile 编译正则规则
import re
com = re.compile('\d+') # 制定正则规则
ret = com.search('abc1cde2fgh3skhfk')
print(ret.group()) # ret = com.findall('abc1cde2fgh3skhfk')
print(ret) # ['1', '2', '3'] ret = com.finditer('abc1cde2fgh3skhfk')
for i in ret:
print(i.group()) # 1 2 3
finditer 节省空间的方法
ret = re.finditer('\d+','abc1cde2fgh3skhfk')
print(ret)
for i in ret:
print(i.group()) # 逐个取值
四、分组命名、分组约束
当我们需要取 <h1>函数</h1> \<a>函数</a> 中的内容时,需要用到分组命名:
pattern = '<(?P<tag>.*?)>.*?</(?P=tag)>'
ret = re.search(pattern,'<h1>函数</h1>')
print(ret) # <_sre.SRE_Match object; span=(0, 11), match='<h1>函数</h1>'>
if ret:
print(ret.group()) # <h1>函数</h1>
print(ret.group(1)) # h1
print(ret.group('tag')) # h1
可以去除类似 <h1>函数</h1> 标签对
直接用\1也是可以的
pattern = r'<(.*?)>.*?</\1>'
ret = re.search(pattern,'<a>函数</a>')
print(ret) # <_sre.SRE_Match object; span=(0, 11), match='<h1>函数</h1>'>
if ret:
print(ret.group()) # <h1>函数</h1>
print(ret.group(1)) # h1
基础的正则表达式与re模块(2)的更多相关文章
- Python开发基础-Day14正则表达式和re模块
正则表达式 就其本质而言,正则表达式(或 re)是一种小型的.高度专业化的编程语言,(在Python中)它内嵌在Python中,并通过 re 模块实现.正则表达式模式被编译成一系列的字节码,然后由用 ...
- python基础之正则表达式和re模块
正则表达式 就其本质而言,正则表达式(或 re)是一种小型的.高度专业化的编程语言,(在Python中)它内嵌在Python中,并通过 re 模块实现.正则表达式模式被编译成一系列的字节码,然后由用 ...
- python基础之 正则表达式,re模块
1.正则表达式 正则表达式:是字符串的规则,只是检测字符串是否符合条件的规则而已 1.检测某一段字符串是否符合规则 2.将符合规则的匹配出来re模块:是用来操作正则表达式的 2.正则表达式组成 字符组 ...
- python基础之正则表达式 re模块
内容梗概: 1. 正则表达式 2. re模块的使⽤ 3. 一堆练习正则表达式是对字符串串操作的一种逻辑公式. 我们一般使用正则表达式对字符串进行匹配和过滤.使用正则的优缺点: 优点: 灵活,功能性强, ...
- Python与正则表达式[0] -> re 模块的正则表达式匹配
正则表达式 / Regular Expression 目录 正则表达式模式 re 模块简介 使用正则表达式进行匹配 正则表达式RE(Regular Expression, Regexp, Regex) ...
- python基础之正则表达式
正则表达式语法 正则表达式 (或 RE) 指定一组字符串匹配它;在此模块中的功能让您检查一下,如果一个特定的字符串匹配给定的正则表达式 (或给定的正则表达式匹配特定的字符串,可归结为同一件事). 正则 ...
- 黑马程序员:Java基础总结----正则表达式
黑马程序员:Java基础总结 正则表达式 ASP.Net+Android+IO开发 . .Net培训 .期待与您交流! 正则表达式 import java.util.regex.*; 符合一定规 ...
- Python之正则表达式(re模块)
本节内容 re模块介绍 使用re模块的步骤 re模块简单应用示例 关于匹配对象的说明 说说正则表达式字符串前的r前缀 re模块综合应用实例 正则表达式(Regluar Expressions)又称规则 ...
- 【转】Python之正则表达式(re模块)
[转]Python之正则表达式(re模块) 本节内容 re模块介绍 使用re模块的步骤 re模块简单应用示例 关于匹配对象的说明 说说正则表达式字符串前的r前缀 re模块综合应用实例 参考文档 提示: ...
随机推荐
- 【CF1132F】Clear the String (DP)
/* 区间dp题目, 考虑当前区间l,r 是可以枚举最后一次拿的分界点来考虑最右边节点是不是具有贡献 */ #include<cstdio> #include<algorithm&g ...
- 什么是事务、事务特性、事务隔离级别、spring事务传播特性
1.什么是事务: 事务是程序中一系列严密的操作,所有操作执行必须成功完成,否则在每个操作所做的更改将会被撤销,这也是事务的原子性(要么成功,要么失败). 2.事务特性: 事务特性分为四个:原子性(At ...
- promise请求数据用法
Promise简介 Promise 是异步编程的一种解决方案,比传统的解决方案–回调函数和事件--更合理和更强大.ES6将其写进了语言标准,统一了语法,里面保存着某个未来才回结束的事件(通常是一个异步 ...
- 32.纯 CSS 创作六边形按钮特效
原文地址:https://segmentfault.com/a/1190000015020964 感想:简简单单的动画特效,位置,动画. HTML代码: <nav> <ul> ...
- ant 标签详解
Ant 开发 Ant的构建文件当开始一个新的项目时,首先应该编写Ant构建文件.构建文件定义了构建过程,并被团队开发中每个人使用.Ant构建文件默认命名为build.xml,也可以取其他的名字.只不过 ...
- [转] Android中的设计模式-备忘录模式
转自Android中的设计模式-备忘录模式 定义 备忘录设计模式的定义就是把对象的状态记录和管理委托给外界处理,用以维持自己的封闭性. 比较官方的定义 备忘录模式(Memento Pattern)又叫 ...
- java 父类引用指向子类对象---动态绑定
知识点: 1.java 中父类引用指向子类对象时动态绑定针对的只是子类重写的成员方法: 2.父类引用指向子类对象时,子类如果重写了父类的可重写方法(非private.非 final 方法),那么这个对 ...
- 【JEECG技术文档】JEECG 组织机构导入V3.7
1.功能介绍 组织机构导入 提供组织机构模版导入功能,使用户更快速的创建组织机构 要使用组织机构导入功能需要完成以下步骤: 1. 下载模版excel 2. 填写组织机构信息 3. 点击导入-选择文件- ...
- English-英语学习杂志及资料
[英文原版杂志] >>经济学人 英文原版PDF+双语版+文本音频 超全下载!http://bbs.zhan.com/thread-8443-1-1.html?sid=2004 >&g ...
- sizeof 空类
C++标准规定类的大小不为0,空类的大小为1,当类不包含虚函数和非静态数据成员时,其对象大小也为1. 如果在类中声明了虚函数(不管是1个还是多个),那么在实例化对象时,编译器会自动在对象里安插一个指针 ...