首页 > 编程语言 >【python】re模块

【python】re模块

时间:2023-01-14 23:24:30浏览次数:44  
标签:字符 匹配 前面 python re 模块 print group

  • 定义:re模块称为正则表达式;
  • 作用:创建一个"规则表达式",用于验证和查找符合规则的文本,广泛用于各种搜索引擎、账户密码的验证等;
  • 预定义字符
\d  匹配所有的十进制数字  0-9
\D  匹配所有的非数字,包含下划线
\s  匹配所有空白字符(空格、TAB等)
\S  匹配所有非空白字符,包含下划线
\w  匹配所有字母、汉字、数字    a-z A-Z 0-9
\W  匹配所有非字母、汉字、数字,包含下划线
  • 特殊字符
1、$:匹配一行的结尾(必须放在正则表达式最后面)

2、^:匹配一行的开头(必须放在正则表达式最前面)

3、*:前面的字符可以出现0次或多次(0~无限)

4、+:前面的字符可以出现1次或多次(1~无限)

5、?:变"贪婪模式"为"勉强模式",前面的字符可以出现0次或1次

6、.:匹配除了换行符"\n"之外的任意单个字符

7、|:两项都进行匹配

8、[ ]:代表一个集合,有如下三种情况
[abc]:能匹配其中的单个字符
[a-z0-9]:能匹配指定范围的字符,可取反(在最前面加入^)
[2-9] [1-3]:能够做组合匹配

9、{ }:用于标记前面的字符出现的频率,有如下情况:
{n,m}:代表前面字符最少出现n次,最多出现m次
{n,}:代表前面字符最少出现n次,最多不受限制
{,m}:代表前面字符最多出现n次,最少不受限制
{n}:前面的字符必须出现n次
  • 匹配方法
s = '我的电话是:10086,女朋友的电话是:10010'

#1、findall():所有结果都返回到一个列表中
ret1 = re.findall('\d+',s)
print(ret1)
#2、finditer():所有结果都返回到迭代器,取数据要用  .group()
ret2 = re.finditer('\d+',s)   #<callable_iterator object at 0x0000024A0FAEB400>
print(ret2)   #<callable_iterator object at 0x0000024A0FAEB400>
for i in ret2:
    print(i.group())

#3、search():返回匹配到的第一个对象(object),对象可以调用group()返回结果
ret3 = re.search('\d+',s)
print(ret3.group())

#4、match():只在字符串开始匹配,也只返回一个对象,没有匹配到就返回 None
ret4 = re.match('\d+',s)
print(ret4)

#5、sub('规则','新字符','旧字符串'):替换
ret5 = re.sub('x.l','xxx','sdakofasldxwlfasfj')
print(ret5)      #sdakofasldxxxfasfj

#6、compile():先把正则表达式编译成一个对象,提高效率,重复使用
res = """
<div class='jay'><span id='1'>周杰伦</span></div>
<div class='ldh'><span id='2'>刘德华</span></div>
<div class='zxy'><span id='3'>张学友</span></div>
<div class='hsbd'><span id='4'>胡说八道</span></div>
"""
obj = re.compile(r"<div class='.*?'><span id='\d+'>.*?</span></div>",re.S)

result = obj.finditer(res)   #re.S  让 . 能匹配换行符
for i in result:
    print(i.group())

#重点,分组
#(?P<分组名称>正则)  可以单独从正则匹配的内容中提取到XX名称的内容
obj1 = re.compile(r"<div class='(?P<yname>.*?)'><span id='(?P<id>\d+)'>(?P<name>.*?)</span></div>",re.S)

result1 = obj1.finditer(res)
for it in result1:
    print(it.group('name'))

标签:字符,匹配,前面,python,re,模块,print,group
From: https://www.cnblogs.com/xwltest/p/17052775.html

相关文章

  • 【Python】ass双语字幕时间对齐(手动)
    给定一份ass格式的双语歌词文件,其中日语已经对齐了正确时间,汉语的时间还是乱的。把日语的时间用到汉语上面。日语字幕如下(节选部分):Dialogue:0,0:00:02.98,0:00:08.23,......
  • UVA1502 GRE Words
    一道\(AC\)自动机\(+\)线段树难题。#include<algorithm>#include<cstring>#include<cmath>#include<cstdio>usingnamespacestd;constintN=3e5+10;tem......
  • spark任务报错java.io.IOException: Failed to send RPC xxxxxx to xxxx:xxx, but got
    ##日志信息如下```Attemptedtogetexecutorlossreasonforexecutorid17atRPCaddress192.168.48.172:59070,butgotnoresponse.Markingasslavelost.......
  • python简单处理http请求
    代码块response=requests.get(url=url,headers=headers,params=params)html=etree.HTML(response.text)pythonrequest库requests.get()意为获取网页,对应HTTP中......
  • python磷虾群算法
    首先设定初始随机种群数目,然后让虾群自动繁殖,最后就可以得出虾群的最终种群数目。例如设定初始的种群数目为20,最终在繁殖后得到的种群数目为35。importrandomclassSh......
  • [Typescript] Represent Generics at the Lowest Level
      Therearetwosolutionstothischallenge,bothwithdifferentwaysofrepresentingthegeneric.Solution1:Thefirstoptionisusing TConfig whichex......
  • Django用户模块
    Django作为一个成熟的Web框架,其本身就自带一套User模型。具体的源码位置在django.contrib.auth.models文件中的classUser(AbstractUser)。如果我们深入探究源码,就......
  • Shiro+SpringBoot+Mybatis+Redis实现权限系统
     这个项目涉及到的技术:SpringBoot,Thymeleaf,MyBaits,Redis,Shiro,JavaMail,EasyUI,Excel导入、导出 下面展示一下界面: 主页:  用户列表:  角色权限授予: 资源列表:  用户角......
  • 【EasyUI篇】Resizable (调整大小组件)
    微信公众号:​​程序yuan​​关注可了解更多的教程。问题或建议,请公众号留言;​​查看-->全套EasyUI示例目录​​Resizable(调整大小组件)  JSP文件<%--CreatedbyInte......
  • 12. Redis 之 AOF持久化方式
    Redis之AOF持久化方式AOF简介Redis的持久化方式之一RDB是通过保存数据库的键值对数据来记录数据库的状态。而另一种持久化策略AOF就是通过保存Redis服务器所执行的命令来......