首页 > 编程语言 >python-正则表达式re模块

python-正则表达式re模块

时间:2022-09-28 18:47:35浏览次数:56  
标签:匹配 python res re print group 正则表达式 match

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()))

#匹配邮箱  格式:[email protected]
res=re.match('[a-zA-Z0-9]{6,11}@163.com','[email protected]')
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$','[email protected]')
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,res,re,print,group,正则表达式,match
From: https://www.cnblogs.com/saury/p/16739196.html

相关文章

  • python-函数的参数与返回值
    Python函数4.1、函数初识在编写程序的过程中,有某一功能代码块出现多次,但是为了提高编写的效率以及代码的重用,所以把具有独立功能的代码块组织为一个小模块,这就是函数就......
  • python中字典更新键(key)的方式
    字典中的键(key)是哈希类型,不可以直接修改,需要修改键值用以下方法.方法一:新增key其value为原key的value,删除原key及其对应的value demo1={'name':'小瓜',......
  • python-简单模块的使用
    提示:简单模块了解掌握@目录uuid模块calendar日历模块time模块datetime模块os模块sys模块random模块json和pickle模块jsonpickle模块hashlib模块configparser模块subproc......
  • python-名称空间与作用域
    名称空间与作用域(1)名称空间(namespaces)用来存放名字的地方是对栈区的划分有了名称空间,就可在栈区中放相同的名字1.1、内置名称空间存放的名字:是Python解释器内置的名字......
  • python-并发编程
    目录01、理论多道技术null02、进程进程运行的三状态图同步和异步阻塞和非阻塞开启进程的两种方式进程对象的join方法进程之间数据相互隔离(默认情况下)进程对象及其他方法僵......
  • Python错误:模块导入失败from scrapy.xlib.pydispatch import dispatcher
    问题描述:python中使用pip安装模块时,出现:Fatalerrorinlauncher:Unabletocreateprocessusing'"' 解决办法: 原因分析:scrapy版本不对。测试了一下,发现最......
  • python-CSV文件的读写
    CSV文件:Comma-SeparatedValues,中文叫逗号分隔值或者字符分隔值,其文件以纯文本的形式存储表格数据.可以理解成一个表格,只不过这个表格是以纯文本的形式显示,单元格与单元......
  • python-py文件打包成exe可执行文件
    方法一::打包完成后可以直接被他人使用,他人不用安装python环境的可以使用pyinstaller模块实现将python项目打包成exe执行文件"""先安装模块1.pipinstallpyinstaller......
  • python-面向对象属性的访问与self的理解
    属性访问类属性与对象属性在类中定义的名字,都是类的属性,细说的话,类有两种属性:数据属性和函数属性,可以通过__dict__访问属性的值,比如Person1.__dict__['student'],但Python......
  • python-面向过程与函数式
    面向过程与函数式面向过程”面向过程“核心是“过程”二字,“过程”指的是解决问题的步骤,即先干什么再干什么......,基于面向过程开发程序就好比在设计一条流水线,是一种机......