当前位置:
首页 > temp > python入门教程 >
-
Python 正则表达式
正则表达式(RegularExpression, re)
- 是一个计算机科学的概念
- 用于使用单个字符串来描述,匹配符合某个规则的字符串
- 常常用来检索,替换某些模式的文本
正则的写法
-
.(点号): 表示任意一个字符,除了\n,比如查找所有的一个字符 .
-
[]: 匹配中括号中列举的任意字符,比如[L,Y,0], LLY, Y0, LIU
-
\d: 任意一个数字
-
\D: 除了数字都可以
-
\s: 表示空格,tab键
-
\S: 除了空白符号
-
\w: 单词字符,就是a-z, A-Z, 0-9, _
-
\W: 除了“\w”表示的都可以
-
: 表示前面内容重复零次或者多次, \w
-
+: 表示前面内容至少出现一次
-
?: 前面才出现的内容零次或者一次
-
{m,n}: 允许前面内容出现最少m次,最多n次
-
^: 匹配字符串的开始
-
$: 匹配字符串的结尾
-
\b: 匹配单词的边界
-
(): 对正则表达式内容进行分组,从第一个括号开始,编号逐渐增大
验证一个数字: ^\d$ 必须有一个数字,最少一位: ^\d+$ 只能出现数字,且位数为5-10位: ^\d{5,10}$ 注册者输入年龄,要求16岁以上,99岁以下: ^[16,99]$ 只能输入英文字符和数字: ^[A-Za-z0-9]$ 验证qq号码: [0-9]{5,12} 复制代码
-
\A: 只匹配字符串开头,\Aabcd, 则abcd
-
\Z: 只匹配字符串末尾,abcd\Z, abcd
-
|: 左右任意一个
-
(?P...): 分组,除了原来的编号再制定一个别名,(?P12345){2}, 1234512345
-
(?P=name): 引用分组
RE使用大致步骤
- 使用compile将表示正则的字符串编译为一个pattern对象
- 通过pattern对象提供一系列方法度文本进行查找匹配,获得匹配结果,一个Match对象
- 最后使用Match对象提供的属性和方法获得信息,根据需要进行操作
RE常用函数
- group(): 获得一个或者多个分组匹配的字符串,当要获得整个匹配的子串时,直接使用group或者group(0)
- start: 获取分组匹配的子串在整个字符串中的起始位置,参数默认0
- end: 获取分组匹配的子串在整个字符串中的结束位置,默认为0
- span: 返回的结构技术(start(group), end(group))
# 导入相关包
import re
# 查找数字
# r表示字符串不转义
p = re.compile(r'\d+')
# 在字符串“one12twothree33456four78”中进行查找,按照规则p制定的正则进行查找
# 返回结果是None表示没有找到,否则会返回match对象
m = p.match("one12twothree33456four78")
print(m)
复制代码
None
复制代码
# 导入相关包
import re
# 查找数字
# r表示字符串不转义
p = re.compile(r'\d+')
# 在字符串“one12twothree33456four78”中进行查找,按照规则p制定的正则进行查找
# 返回结果是None表示没有找到,否则会返回match对象
# 参数3,6表示在字符串中查找的范围
m = p.match("one12twothree33456four78", 3, 26)
print(m)
# 上述代码说明的问题
# 1. match可以输入参数表示起始位置
# 2. 查找到的结果只包含一个,表示第一次进行匹配成功的内容
复制代码
<_sre.SRE_Match object; span=(3, 5), match='12'>
复制代码
print(m[0])
print(m.start(0))
print(m.end(0))
复制代码
12
3
5
复制代码
import re
# I 表示忽略掉大小写
p = re.compile(r'([a-z]+) ([a-z]+)', re.I)
m = p.match("I am really love you")
print(m)
复制代码
<_sre.SRE_Match object; span=(0, 4), match='I am'>
复制代码
print(m.group(0))
print(m.start(0))
print(m.end(0))
复制代码
I am
0
4
复制代码
print(m.group(1))
print(m.start(1))
print(m.end(1))
复制代码
I
0
1
复制代码
print(m.group(2))
print(m.start(2))
print(m.end(2))
复制代码
am
2
4
复制代码
print(m.groups())
复制代码
('I', 'am')
复制代码
查找
- search(str, [, pos[, endpos]]): 在字符串中查找匹配,pos和endpos表示起始位置
- findall: 查找所有
- finditer:查找,返回一个iter结果
import re
p = re.compile(r'\d+')
m = p.search("one12two34three567four")
print(m.group())
复制代码
12
复制代码
rst = p.findall("one12two34three567four")
print(type(rst))
print(rst)
复制代码
<class 'list'>
['12', '34', '567']
复制代码
sub 替换
- sub(rep1, str[, count])
# sub替换案例
import re
# \w 包含数字和英文字母
p = re.compile(r'(\w+) (\w+)')
s = "hello 123 wang 456, i love you"
rst = p.sub(r'Hello world', s)
print(rst)
复制代码
Hello world Hello world, Hello world you
复制代码
匹配中文
- 大部分中文表示范围是[u4e00-u9fa5], 不包括全角标点
import re
title = '世界 你好, hello moto'
p = re.compile(r'[\u4e00-\u9fa5]+')
rst = p.findall(title)
print(rst)
复制代码
['世界', '你好']
复制代码
贪婪和非贪婪
- 贪婪:尽可能多的匹配, (*)表示贪婪匹配
- 非贪婪:找到符合条件的最小内容即可,(?)表示非贪婪
- 正则默认使用贪婪匹配
import re
title = u'<div>name</div><div>age</div>'
p1 = re.compile(r'<div>.*</div>')
p2 = re.compile(r'<div>.*?</div>')
m1 = p1.search(title)
print(m1.group())
m2 = p2.search(title)
print(m2.group())
复制代码
<div>name</div><div>age</div>
<div>name</div>
出 处:https://www.cnblogs.com/pythonzhilian/p/14519507.html
最新更新
nodejs爬虫
Python正则表达式完全指南
爬取豆瓣Top250图书数据
shp 地图文件批量添加字段
爬虫小试牛刀(爬取学校通知公告)
【python基础】函数-初识函数
【python基础】函数-返回值
HTTP请求:requests模块基础使用必知必会
Python初学者友好丨详解参数传递类型
如何有效管理爬虫流量?
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
SQL Server -- 解决存储过程传入参数作为s
关于JS定时器的整理
JS中使用Promise.all控制所有的异步请求都完
js中字符串的方法
import-local执行流程与node模块路径解析流程
检测数据类型的四种方法
js中数组的方法,32种方法
前端操作方法
数据类型
window.localStorage.setItem 和 localStorage.setIte
如何完美解决前端数字计算精度丢失与数