2017/6/8-python正则表达式的使用
时间:2022-05-08
本文章向大家介绍2017/6/8-python正则表达式的使用,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
#match()函数的使用
#w匹配字母数字及下划线
# s匹配任意空白字符,等价于 [tnrf].
# d匹配任意数字,等价于 [0-9]
# [...]用来表示一组字符,单独列出:[amk] 匹配 'a','m'或'k'
# [^...]不在[]中的字符:[^abc] 匹配除了a,b,c之外的字符。
#^匹配字符串的开头
#{n}精确匹配n个前面表达式。
import re
content='Hello 123 4567 World_This is a Regex Demo'
print(len(content))
pattern=re.compile(r'^Hellosdddsd{4}sw{10}')
result=re.match(pattern,content)
print(result)
print(result.group())
print(result.span())
41
<_sre.SRE_Match object; span=(0, 25), match='Hello 123 4567 World_This'>
Hello 123 4567 World_This
(0, 25)
#匹配目标
#group()会输出完整的匹配结果,而group(1)会输出第一个被()包围的匹配结果
import re
content='Hello 1234567 World_This is a Regex Demo'
pattern=re.compile(r'^Hellos(d{7})s(w{5})')
result=re.match(pattern,content)
print(result)
print(result.group())
print(result.group(1))
print(result.group(2))
print(result.span())
<_sre.SRE_Match object; span=(0, 19), match='Hello 1234567 World'>
Hello 1234567 World
1234567
World
(0, 19)
#通用匹配
#.匹配任意字符(除换行符外)
#*匹配0次或者多次
import re
content='Hello 123 4567 World_This is a Regex Demo'
pattern=re.compile(r'^Hello.*Demo$')
result=re.match(pattern,content)
print(result)
print(result.group())
print(result.span())
<_sre.SRE_Match object; span=(0, 41), match='Hello 123 4567 World_This is a Regex Demo'>
Hello 123 4567 World_This is a Regex Demo
(0, 41)
#贪婪匹配与非贪婪匹配
#01贪婪匹配
import re
content='Hello 1234567 World_This is a Regex Demo'
pattern=re.compile(r'^He.*(d+).*Demo$')
result=re.match(pattern,content)
print(result)
print(result.group())
print(result.group(1))
<_sre.SRE_Match object; span=(0, 40), match='Hello 1234567 World_This is a Regex Demo'>
Hello 1234567 World_This is a Regex Demo
7
#02非贪婪匹配
import re
content='Hello 1234567 World_This is a Regex Demo'
pattern=re.compile(r'He.*?(d+).*Demo$')
result=re.match(pattern,content)
print(result)
print(result.group())
print(result.group(1))
<_sre.SRE_Match object; span=(0, 40), match='Hello 1234567 World_This is a Regex Demo'>
Hello 1234567 World_This is a Regex Demo
1234567
#但这里注意,如果匹配的结果在字符串结尾,.*?就有可能匹配不到任何内容了,因为它会匹配尽可能少的字符,例如:
import re
content='https://www.baidu.com/search/error.html'
result1=re.match(r'^https.*search/(.*)',content)
result2=re.match(r'https.*search/(.*?)',content)
print(result1.group(1))
print(result2.group(1))
error.html
#修饰符
#正则表达式可以包含一些可选标志修饰符来控制匹配的模式。修饰符被指定为一个可选的标志。
import re
content = '''Hello 1234567 World_This
is a Regex Demo'''
pattern=re.compile(r'^He.*?(d+).*?Demo$',re.S)
result=re.match(pattern,content)
print(result.group(1))
1234567
#转义匹配
import re
content='(百度)www.baidu.com'
pattern=re.compile(r'(百度)www.baidu.com')
result=re.match(pattern,content)
print(result.group())
(百度)www.baidu.com
#search()
import re
content = 'Extra stings Hello 1234567 World_This is a Regex Demo Extra stings'
pattern=re.compile('He.*?(d+).*Demo')
result=re.search(pattern,content)
print(result.group())
print(result.group(1))
Hello 1234567 World_This is a Regex Demo
1234567
import re
html = '''<div id="songs-list">
<h2 class="title">经典老歌</h2>
<p class="introduction">
经典老歌列表
</p>
<ul id="list" class="list-group">
<li data-view="2">一路上有你</li>
<li data-view="7">
<a href="/2.mp3" singer="任贤齐">沧海一声笑</a>
</li>
<li data-view="4" class="active">
<a href="/3.mp3" singer="齐秦">往事随风</a>
</li>
<li data-view="6"><a href="/4.mp3" singer="beyond">光辉岁月</a></li>
<li data-view="5"><a href="/5.mp3" singer="陈慧琳">记事本</a></li>
<li data-view="5">
<a href="/6.mp3" singer="邓丽君"><i class="fa fa-user"></i>但愿人长久</a>
</li>
</ul>
</div>'''
result=re.search('<li.*?active.*?singer="(.*?)">(.*?)</a>',html,re.S)
if result:
print(result.group(1), result.group(2))
齐秦 往事随风
#sub()方法
import re
content = '54aK54yr5oiR54ix5L2g'
result=re.sub('d+','',content)
print(result)
aKyroiRixLg
log='2017-06-06 15:06:16,148 - root - DEBUG - logger debug message'
print(log.split('-'))
['2017', '06', '06 15:06:16,148 ', ' root ', ' DEBUG ', ' logger debug message']
- github & CSRF
- 如何使用Python读取大文件
- 介绍一种非常好用汇总数据的方式GROUPING SETS
- 史上最大的CPU Bug(幽灵和熔断的OS&SQLServer补丁)
- 数据库副本的自动种子设定(自增长)
- Git 项目推荐 | 基于go+protobuff 实现的分布式
- ReflectASM-invoke,高效率java反射机制原理
- Web应用渗透测试-本地文件包含
- shiro权限控制(二):分布式架构中shiro的实现
- Groovy实现原理分析——准备工作
- HBCTF第一场2个pwn题的简单分析
- ACM竞赛之输入输出(以C与C++为例)
- 能让程序做的事情坚决不用人来做——批量修复markdownlint MD034警告
- swift demo1 tableview
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- python 操作 txt 文件中数据教程[4]-python 去掉 txt 文件行尾换行
- java字符数组char[]和字符串String之间的转换
- python操作txt文件中数据教程[3]-python读取文件夹中所有txt文件并将数据转为csv文件
- python操作txt文件中数据教程[1]-使用python读写txt文件
- python循环删除列表元素常见错误与正确方法
- Python字符串,整型,浮点数相互转化
- python创建与遍历List二维列表
- 论文研读-基于变量分类的动态多目标优化算法
- matplotlib交互模式与pacharm单独Figure设置
- numpy二进制转换和范围缩放
- 使用数组作为索引遍历numpy数组
- enumerate 遍历numpy数组
- 两种群决策变量高斯分布的KL散度和WD距离
- Tensorboard 显示计算图节点信息
- 使用tqdm组件构造程序进度条