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正则表达式,re模块使用 -> 正文阅读

[Python知识库]Python正则表达式,re模块使用

07、正则表达式

学习正则表达式操作字符串
re模块是用C语言写的没匹配速度非常快
其中compile函数根据一个模式字符串和可选的标志参数生成一个正则表达式对象,该对象拥有一系列方法用于正则表大会匹配和替换,re模块也提供了与这下方法功能完全一致的函数,这些函数适用一个模式字符串做为他们的第一个参数

re.macth方法

  • re.math 尝试从字符串起始位置匹配,返回match对象,,否则返回None,适用group()获取匹配成功的字符串
    • 语法:re.match(pattern,string,flags)
参数描述
pattern匹配的正则表达式
string要匹配的字符串
flags标志位,用于控制正则表达式的匹配方式:如:是否匹配大小写,多行匹配
import re 
str='Python is the best language in the world'
result= re.match('P',str)
print(type(result))#<class 're.Match'>
print(result.group())

标志位

  • 如果使用多个标志位,使用|分割,如:re.I|re.M
修饰符描述
re.I适匹配对大小写不敏感
re.L做本地化识别匹配
re.M多行匹配,影响^ 和$
re.S使.匹配包括换行在内的所有字符
re.U根据Unicode字符集解析字符,这个标志影响\w,\W ,\b,\B
re.X该标识符通过给予你更灵活的格式以便于你将正则表达式写得更易于理解。
import re 
strData='Python is the best language in the world\
gslfjgldsjgls'
#result= re.match('p',strData,re.I|re.M)#第三个参数 忽略大小写
#print(type(result))#<class 're.Match'>
#print(result.group())
res=re.match('(.*?)is(.*?)',strData,re.I)
print(res.group(1))
print(res.group(2))

常用匹配规则

符号匹配规则
.(点)匹配任意1个字符除了换行符
[abc]匹配abc中任意一个
\d匹配一个数字0-9
\D匹配非数字
\s匹配空白 即空格 tab键
\S匹配非空格
\w匹配单词字符 即a-z A-Z 0-9 _
\W匹配非单词字符

匹配字符数量

符号匹配规则
*匹配前一个字符出现0次或者无限次,即可有可无
+匹配前一个字符出现1次或者无限次,即至少有1次
?匹配前一个字符出现1次或者0次,即要么有1次要么没有
{m}匹配前一个字符出现m次
{m,}匹配前一个字符至少出现m次
{m,n}匹配前一个字符出现从m次到n次

7.1、限定匹配数量规则


import re

# * 匹配前一个字符出现0次或者无限次
res=re.match('[a-z][a-z]*','MyPython',re.I)
print(res.group())

# + 匹配前一个字符1次或者无限次  至少一次
res=re.match('[a-zA-Z]+[\w]*','mynAMEDCeisz848s_')
print(res.group())

# ? 匹配前一个字符0次或者1次
res=re.match('[a-zA-Z]+[\d]?','mkohjhjgu8jg8')
print(res.group())

# {min,max} 匹配前一个从min到max次   min max必须是非负整数
#{count}精确匹配次数   {count,}没有限制
res=re.match('\d{4,}','46145')
if res:
    print('匹配成功{}'.format(res.group()))

#匹配邮箱  格式:xxxxxx@163.com
res=re.match('[a-zA-Z0-9]{6,11}@163.com','318129549@163.com')
print(res.group())


7.2、原生字符串

# path="D:\\1_zhao_File\\1_MarkDown\MarkDown学习使用篇"
# print(path )
import re


#原生字符串  r
print(re.match(r'c:\\a.text','c:\\a.text').group())


#匹配开头结尾
#^ 匹配字符串开头
#$ 匹配字符串结尾
# res=re.match('^p.*','python is language')
res=re.match('^p[\w]{5}','python is language')
print(res.group())
res=re.match('[\w]{5,15}@[\w]{2,5}.com$','318129549@qq.com')
print(res.group())

7.3、分组匹配


#  | 匹配左右任意一个表达式  从左往右
import  re

res=re.match('[\w]*|100','100')
print(res.group())

 # (ab)分组匹配  将括号中字符作为一个分组
res=re.match('([0-9]*)-(\d*)','123456-464651561')
print(res.group())
print(res.group(1))
print(res.group(2))

# \num 的使用
# htmlTag='<html><h1>Python核心编程</h1></html>'
# res1=re.match(r'<(.+)>(.+)>(.+)</\2></\1>',htmlTag)
# print(res1.group(1))


#  分组 别名的使用 (?P<名字>)
data='<div><h1>www.baidu.com</h1></div>'
res=re.match(r'<(?P<div>\w*)><(?P<h1>\w*)>(?P<data>.*)</\w*></\w*>',data)

print(res.group())

7.4、编译函数compile


# re.compile 方法
'''
compile将正则表达式模式编译成一个正则表达式对象
reg=re.compile(pattern)
result=reg.match(string)
等效于result=re.match(pattern,string)
使用re.compile和保持所产生的正则表达式对象重用效率更高
'''
import re

#compile 可以把字符串编译成字节码
#优点:在使用正则表达式进行match时,python会将字符串转为正则表达式对象
# 而如果使用compile,只需要转换一次即可,以后在使用模式对象的话无需重复转换

data='1364'
pattern=re.compile('.*')
#使用pattern对象
res=pattern.match(data)
print(res.group())


#re.search方法
#search在全文中匹配一次,匹配到就返回
data='我爱我伟大的祖国,I love China,China is a great country'
rees=re.search('China',data)
print(rees)
print(rees.span())
print(rees.group())
# print(data[21])

#re.findall方法 匹配所有,返回一个列表,

data='华为牛逼是华人的骄傲'
# res =re.findall('华.',data)
# print(res)
pattern=re.compile('华.')
res=pattern.findall(data)
print(res)


# re.sub方法 实现目标搜索和替换
data1='Pythons是很受欢迎的编程语言'
pattern='[a-zA-Z]+' #字符集范围  +代表 前导字符模式出现1从以上
res=re.sub(pattern,'C#',data1)
resn=re.subn(pattern,'C#',data1)
print(res)
print(resn)
#re.subn 完成目标的的搜索和替换 还返回被替换的数量,以元组的形式返回

#re.split  是新分割字符串
data='百度,腾讯,阿里,华为,360,字节跳动'
print(re.split(',',data))

7.5贪婪模式和非贪婪模式

'''
python 中默认是贪婪的,总是贪婪的匹配尽可能多的字符,非贪婪相反,总是尝试匹配尽可能少的字符
在  ” * ? + {m,n}"后面加上 ? 使贪婪变成非贪婪

'''
#贪婪
import  re
res=re.match('[\d]{6,9}','111222333')
print(res.group())


#非贪婪
res=re.match('[\d]{6,9}?','111222333')
print(res.group())


content='asdfbsdbdsabsd'
# pattern=re.compile('a.*b')# 贪婪
pattern=re.compile('a.*?b')#非贪婪
res=pattern.search(content)
print(res.group())
#0710-49

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2022-09-04 01:07:23  更:2022-09-04 01:11:36 
 
开发: 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年12日历 -2024/12/26 14:19:15-

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