IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> Python正则表达式用法 -> 正文阅读

[Python知识库]Python正则表达式用法

目录

1. 基本知识

2.常用元字符

3. 量词

4.贪婪匹配和惰性匹配

5. findall、finditer、search、match、compile 用法

6. 给分组起别名


1. 基本知识

正则表达式(Regular Expression)是一种使用表达式对字符串进行匹配的语法规则,用于处理字符串

优点:速度快、效率高、准确性高

语法规则:使用元字符排列组合用来匹配字符串。

  • 元字符:具有固定含义的特殊符号
  • 量词: 控制前面的元字符出现的次数

2.常用元字符

常用的元字符
元字符含义
.匹配除换行符(\n、\r)之外的任何单个字符。要匹配包括 '\n' 在内的任何字符,请使用像"(.|\n)"的模式。
\w匹配字母或数字或下划线
\s匹配任意的空白字符
\d匹配数字
\n匹配一个换行符
\t匹配一个制表符
^匹配字符串的开始
$匹配字符串的技术
\W匹配非字母或数字或下划线
\D匹配非数字
\S匹配非空白符
a|b匹配字符a或字符b
()匹配括号内的表达式,也表示一个组
[...]匹配字符组中的字符
[^...]匹配除了字符组中字符的所有字符

3. 量词

作用:控制前面的元字符出现的次数

量词
元字符含义
*重复零次或更多次,? 等价于{0, }
+重复一次或更多次,等价于{1,}
?重复零次或一次
{n}重复n次
{n,}重复n次或更多次
{n, m}重复n到m次

4.贪婪匹配和惰性匹配

表达式含义
.*贪婪匹配(尽可能多的去匹配)
.*?惰性匹配(尽可能少的去匹配)

示例

str: "玩吃鸡游戏,晚上一起上游戏,干嘛呢, 打游戏啊"
reg: 玩.*?游戏
此时匹配的是: 玩吃鸡游戏

reg: 玩.*游戏
此时匹配的是: 吃鸡游戏,晚上一起上游戏,干嘛呢, 打游戏

5. findall、finditer、search、match、compile 用法

补充: 正则表达式式中使用括号就分组匹配,一个括号就是一个分组。

(1) findall和finditer :都可以获取所有匹配的结果,不同时是findall返回的是一个list,而finditer 返回的是一个迭代器<class 'callable_iterator'>

str1 = "我今年25岁, 我有2000万"
res = re.findall("\d+", str1)
print(res) # ['25', '2000']

res = re.finditer("\d+", str1)
print(type(res))
for item in res: # 从迭代器中拿到内容
    print(item.group()) # 从匹配的结果中拿到数据
# 25
# 2000

(2)search和match

? ? a. search:会扫描整个字符串匹配,只会返回第一次匹配到的内容,返回的是Match object ,需要使用group拿到数据

# search用法
res = re.search("\d+", str1)
print(res) # <re.Match object; span=(3, 5), match='25'>
print(res.group()) # 25

? ? b.match在匹配的时候,是从字符串的开头进行匹配,类似在正则前面加上^。只有在0位置匹配成功才有返回,否则返回None

res = re.match(r"\d+", str1)
print(res) 

(3)compile?预加载,提前把正则对象加载完毕

s = """
    <div class='西游记'><span id='10086'>中国移动</span></div>
    <div class='西游记'><span id='10010'>中国联通</span></div>
"""

obj = re.compile(r"<span id='(\d+)'>(.*?)</span>")
# 直接把加载好的对象进行使用
res = obj.findall(s) 
print(res)

# [('10086', '中国移动'), ('10010', '中国联通')]

6. 给分组起别名

语法: (?P<名称>正则)

s = """
    <div class='西游记'><span id='10086'>中国移动</span></div>
    <div class='西游记'><span id='10010'>中国联通</span></div>
"""

obj = re.compile(r"<span id='(?P<id>\d+)'>(?P<name>.*?)</span>")
res = obj.finditer(s)
for item in res:
    print(item.group("id"), item.group("name"))
    
    # 10086 中国移动
    # 10010 中国联通

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2022-04-26 11:38:17  更:2022-04-26 11:40:39 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 17:05:26-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码