Python正则笔记

news/2024/12/2 6:59:14/

Python正则笔记

  • 点-匹配所有字符
  • 星号-重复匹配任意次
  • 加号-重复匹配多次
  • 问号-匹配0-1次
  • 花括号-匹配指定次数
  • 贪婪模式和非贪婪模式
  • 反斜杠
  • 方括号-匹配几个字符之一
  • 起始、结尾位置 和 单行、多行模式
  • 括号-分组
  • split
  • sub
  • 来源

点-匹配所有字符

.表示要匹配除了换行符之外的任何单个字符。

content = '''苹果是绿色的
橙子是橙色的
香蕉是黄色的
乌鸦是黑色的'''import re
p = re.compile(r'.色')
print(type(p))
for one in p.findall(content):print(one)
'''
<class 're.Pattern'>
绿色
橙色
黄色
黑色
'''

星号-重复匹配任意次

*表示匹配前面的子表达式任意次,包括0次。

content = '''苹果,是绿色的
橙子,是橙色的
香蕉,是黄色的
乌鸦,是黑色的
猴子,'''import re
p = re.compile(r',.*')
for one in p.findall(content):print(one)
'''
,是绿色的
,是橙色的
,是黄色的
,是黑色的
,
'''

加号-重复匹配多次

+表示匹配前面的子表达式一次或多次,不包括0次。

content = '''苹果,是绿色的
橙子,是橙色的
香蕉,是黄色的
乌鸦,是黑色的
猴子,'''import re
p = re.compile(r',.+')
for one in p.findall(content):print(one)
'''
,是绿色的
,是橙色的
,是黄色的
,是黑色的
'''

问号-匹配0-1次

?表示匹配前面的子表达式0次或1次。

content = '''苹果,是绿色的
橙子,是橙色的
香蕉,是黄色的
乌鸦,是黑色的
猴子,'''import re
p = re.compile(r',.?')
for one in p.findall(content):print(one)
'''
,是
,是
,是
,是
,
'''

花括号-匹配指定次数

花括号表示前面的字符匹配指定的次数 。

content = '''红彤彤,绿油油,黑乎乎,绿油油油油'''import re
p1 = re.compile(r'油{4}') # 匹配4次
p2 = re.compile(r'油{3,4}') # 匹配3到4次
for one in p1.findall(content): print(one)
for one in p2.findall(content):print(one)
'''
p1: 油油油油
p2: 油油油油
'''

贪婪模式和非贪婪模式

source = '<html><head><title>Title</title>'import re
p1 = re.compile('<.*>') # 贪婪模式
p2 = re.compile('<.*?>') # 非贪婪模式
print(p1.findall(source)) # ['<html><head><title>Title</title>']
print(p2.findall(source)) # ['<html>', '<head>', '<title>', '</title>']

反斜杠

content = '''苹果.是绿色的
橙子.是橙色的
香蕉.是黄色的'''import re# 对元字符的转义
p1 = re.compile(r'.*\.')
for one in  p1.findall(content):print(one)
'''
苹果.
橙子.
香蕉.
'''# 匹配某种字符类型
## \d匹配 - 匹配0-9之间任意一个数字字符
con1 = '111, 12345678912, 111'
p2 = re.compile(r'\d{11}')
print(p2.findall(con1)) # ['12345678912']
## \s匹配 - 匹配一个空白字符, 包括空格, tab, 换行符等
con2 = '111 ,111'
p3 = re.compile(r'111\s,')
print(p3.findall(con2)) # ['111 ,']
## \w匹配 - 匹配一个文字字符, 包括大小写字母, 数字, 下划线, 也包括unicode字符, 也可以指定ascll码标记
con3 = '''
苹果
orange
香蕉
'''
p4 = re.compile(r'\w{2,6}')
print(p4.findall(con3)) # ['苹果', 'orange', '香蕉']
p5 = re.compile(r'\w{2,6}', re.ASCII)
print(p5.findall(con3)) # ['orange']
## \D, \S, \W表示非

方括号-匹配几个字符之一

import recont1 = '''
王亚辉, 13500344799, 89
徐志摩, 1b900785634, 23
周根源, 15909875678, 44
周根源, 17909875678, 44
郝云摩, 05900785634, 23
李根源, 23909875678, 44
'''p1 = re.compile(r'1[35]\d{9}') # 3, 5都可以
print(p1.findall(cont1)) # ['13500344799', '15909875678']
p2 = re.compile(r'1[3-7]\d{9}') # 3到7都可以
print(p2.findall(cont1)) # ['13500344799', '15909875678', '17909875678']cont2 = 'a1b2c3d4e5'
p3 = re.compile(r'[^\d]') # 非数字可以
print(p3.findall(cont2)) # ['a', 'b', 'c', 'd', 'e']

起始、结尾位置 和 单行、多行模式

import recont1 = '''001-苹果价格-60
002-橙子价格-70
003-香蕉价格-80
'''
p1 = re.compile(r'^\d+')
p2 = re.compile(r'^\d+', re.MULTILINE)
print(p1.findall(cont1)) # ['001']
print(p2.findall(cont1)) # ['001', '002', '003']p3 = re.compile(r'\d+$')
p4 = re.compile(r'\d+$', re.MULTILINE)
print(p3.findall(cont1)) # ['80']
print(p4.findall(cont1)) # ['60', '70', '80']

括号-分组

import recont1 = '''
苹果, 苹果是绿色的
橙子, 橙子是橙色的
香蕉, 香蕉是黄色的
'''p1 = re.compile(r'(.*),')
print(p1.findall(cont1)) # ['苹果', '橙子', '香蕉']p2 = re.compile(r'(.*)(,)')
print(p2.findall(cont1)) # [('苹果', ','), ('橙子', ','), ('香蕉', ',')]cont2 = '''
张三, 手机号码15945678901
李四, 手机号码13945677701
王二, 手机号码13845666901
'''p3 = re.compile(r'(.+),.*(\d{11})')
print(p3.findall(cont2)) # [('张三', '15945678901'), ('李四', '13945677701'), ('王二', '13845666901')]

split

import recont1 = '关羽; 张飞, 赵云,   马超, 黄忠  李逵'p1 = re.split(r'[;,\s]\s*', cont1)
print(p1) # ['关羽', '张飞', '赵云', '马超', '黄忠', '李逵']

sub

import recont = '''
video/av66771949/?p=1
'''# 匹配模式替换
p1 = re.sub(r'/av\d*/', '/cn345677/', cont)
print(p1) # video/cn345677/?p=1# 指定替换函数# 替换函数, 参数是Match对象 
def subFunc(match):# Match对象的group(0)返回的是整个匹配上的字符串src = match.group(0);# Match对象的group(1)返回的是第一个group分组的内容number = int(match.group(1))+6dest = f'/av{number}/'print(f'{src}替换为{dest}', end='')# 返回值就是最终替换的字符串return deststr = re.sub(r'/av(\d+)/', subFunc, cont)
print(str)
'''
/av66771949/替换为/av66771955/
video/av66771955/?p=1
'''

来源

白月黑羽. Python编程:正则表达式
白月黑羽. 教程网址


http://www.ppmy.cn/news/331770.html

相关文章

windows下制作linux U盘启动盘或者安装优盘(转)

windows下制作linux U盘启动盘或者安装优盘&#xff08;转&#xff09; Linux发行版排行榜&#xff1a;http://iso.linuxquestions.org/ 【方案一】&#xff1a;UltraISO&#xff08;不推荐&#xff0c;在Windows下制作Windows安装盘绝佳&#xff09; 用UltraISO软件打开linux发…

情人节礼物推荐排行榜、这6款好物值得你考虑

一年一度的情人节又即将到来&#xff0c;相信有不少人在苦恼该送什么样的礼物给自己的另一半&#xff0c;一份好的礼物可以在节日给彼此留下一个美好的回忆&#xff0c;也可以让感情更加温&#xff0c;如果实在不知道送什么&#xff0c;在这里精选了比较实用的适合情人节的礼物…

u盘启动工具哪个好用

电脑系统崩溃了&#xff0c;电脑系统用烦了&#xff0c;电脑系统中毒了...这些问题都要涉及到重装系统&#xff0c;提起重装系统&#xff0c;大家想要当前最火的的方式u盘装系统。但是市面上的u盘启动盘制作工具非常多&#xff0c;有的拥有超多的植入广告&#xff0c;让人甚是烦…

2013八大免费杀毒软件排行榜

为什么80%的码农都做不了架构师&#xff1f;>>> 近期国内外的各大安全厂商纷纷推出2013新版杀毒软件&#xff0c;包括完全免费的终身免费版&#xff0c;在防网络钓鱼方面有很大进步。下面的八款杀毒软件都是永久免费&#xff0c;而且全面兼容Windows主流平台。1. 瑞…

【树形DP+直径思想】代码源每日一题div1 三进制循环

三进制循环 - 题目 - Daimayuan Online Judge 题意&#xff1a; 思路&#xff1a; 有点像树的直径 回顾一下我们是怎么求直径的&#xff1a;维护根节点到其子树上的点的最大距离和次大距离&#xff0c;然后答案就是统计所有结点的次大值最大值 的 最大值 这道题也是一样的&a…

STL学习笔记

STL学习笔记 Vector void VectorTest() {vector<int> vect;vect.push_back(1);vect.push_back(20);vect.push_back(12);vect.push_back(12);vect.push_back(12);sort(vect.begin(),vect.end());for(vector<int>::iterator itervect.begin();iter!vect.end();iter…

离心式冷水机组

离心式冷水机组是利用电作为动力源&#xff0c;氟利昂制冷剂在蒸发器内蒸发吸收载冷剂水的热量进行制冷&#xff0c;蒸发吸热后的氟利昂湿蒸汽被压缩机压缩成高温高压气体&#xff0c;经水冷冷凝器冷凝后变成液体&#xff0c;经膨胀阀节流进入蒸发器再循环。从而制取7℃-12℃冷…

《低代码指南》——维格云低代码应用基础设置方法

目录 1. 简介 1.1 功能简介 1.2 设置条件 2. 应用设置 2.1 设置入口 2.2 修改应用信息 2.4 复制应用 2.5 应用的删除与恢复 3. 应用排序 4. 应用访问 5. 应用切换 5.1 工作台处切换