前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >熬夜到虚脱整理出来的Python的正则表达式总结

熬夜到虚脱整理出来的Python的正则表达式总结

作者头像
sergiojune
发布2021-07-19 11:26:38
4550
发布2021-07-19 11:26:38
举报
文章被收录于专栏:日常学python日常学python

一. python正则表达式介绍

1.正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配。

2.Python 自1.5版本起增加了re 模块,它提供 Perl 风格的正则表达式模式。

3.re 模块使 Python 语言拥有全部的正则表达式功能。

4.compile 函数根据一个模式字符串和可选的标志参数生成一个正则表达式对象。该对象拥有一系列方法用于正则表达式匹配和替换。

5.re 模块也提供了与这些方法功能完全一致的函数,这些函数使用一个模式字符串做为它们的第一个参数。

二. re模块

2.1 match方法

re.match 尝试从字符串的起始位置匹配一个规则,匹配成功就返回match对象,否则返回None。可以使用group()获取匹配成功的字符串。

1.语法:re.match(pattern, string, flags=0)

2.参数说明:

3.我们可以使用group(num) 或 groups() 匹配对象函数来获取匹配表达式。

4.代码演示

代码语言:javascript
复制
'''
修饰符  描述
re.I  使匹配对大小写不敏感
re.L  做本地化识别(locale-aware)匹配
re.M  多行匹配,影响 ^ 和 $
re.S  使 . 匹配包括换行在内的所有字符
re.U  根据Unicode字符集解析字符。这个标志影响 \w, \W, \b, \B.
re.X  该标志通过给予你更灵活的格式以便你将正则表达式写得更易于理解。
'''

输出:

2.2 匹配规则

2.2.1 匹配字符

1. .点的使用:匹配除了换行符之外的任意一个字符字符,还可以.*输出后面的字符串

代码语言:javascript
复制
import re
data='python'
parrtern='..'#匹配规则,这里匹配两个字符
res=re.match(parrtern,data)
print(res.group())#输出:py
'''测试二'''
names='运智在学习python','运气','换人'
pattern='运.'#匹配规则:会匹配运开头的
for item in names:
    chen=re.match(pattern,item)
    if chen:
        print(chen.group())#输出运智,运气

输出:

2. [] 中括号:匹配中括号中的任意一个字符,

代码语言:javascript
复制
str1='hello'
res=re.match('[he]',str1)
print(res.group())#输出:h
2.2.2 分组匹配

代码按例:

2.2.3 限定匹配字符规则

原理:就是匹配数量

1.* 匹配前一个字符出现0次或者无限次,即可有可无 代码:

代码语言:javascript
复制
res=re.match('[A-Z]*','Cy')#匹配0次
print(res.group())#C
res=re.match('[A-Z][a-z]*','Che')#也可以写成" [A-Za-z]* "
print(res.group())
# re.match('[a-zA-Z]+[\w]*','na99m_e')
#re.match('\d{4}','1234')#精确匹

输出:

2. 代码按例匹配邮箱

代码语言:javascript
复制
regexMail=re.match('[a-zA-Z0-9]{6,11}@qq.com','chenyunzhi@qq.com')
if regexMail:
    print('匹配成功{}'.format(regexMail.group()))
    pass

输出:

2.2.4 转义字符
代码语言:javascript
复制
import re
# 在正则前加r,表示原生字符串,python字符串不转义 或者直接\\\\a。
print(re.match(r'c:\\a.txt','c:\\a.txt').group())#c:\a.txt

dt='python is chen'
result=re.match('^p.*',dt)#开头是对的就输出
chen=re.match('^p\w{5}',dt)
End=re.match('\w{5,12}@[\w]{1,9}.\w{3}$','chenyunzhi@qq.com')
if result:
    print(result.group())#python is chen
    print(chen.group())#python
    print(End.group())#chenyunzhi@qq.com

输出:

三. re中的编译函数

3.1 compile方法

1.compile 可以把一个字符串编译成字节码

2.优点:在使用正则表达式进行match的操作时,python会将字符串转为正则表达式对象,

3.而如果使用compile只需要一次转换,以后再使用模式对象的话 无需转换

代码语言:javascript
复制
import re
rs=re.compile('\w.*')
res=rs.match('chenyunzhi')
print(res.group())#输出:chenyunzhi

3.2 search方法

1.search :在全文中匹配一次,匹配到就返回

2.语法:re.search(pattern, string, flags=0)

3.代码

代码语言:javascript
复制
'''
print(re.search('python','人生苦短,我用python').group())
#输出:python

3.3 finall方法

1.finall():查询字符串某个正则表达式全部的非重复出现的情况 返回是一个符合正则表达式的结果列表

2.语法:findall(string[, pos[, endpos]])

3.代码

代码语言:javascript
复制
print(re.findall('p','python的开头是p'))#输出:['p', 'p']

小结:search找到就返回,finall全部找到才返回

3.4 sub方法

1.sub:将匹配到的数据进行替换,实现目标的搜索查找

2.语法:sub(pattern, repl, string, count=0, flags=0)

3.代码

输出:

3.5 split方法

1.split:实现分割字符串,以列表形式返回

2.语法:split(pattern, string, maxsplit=0, flags=0)

代码语言:javascript
复制
print(re.split(',','chen,yun,zhi'))#输出:['chen', 'yun', 'zhi']

四. 贪婪模式与非贪婪模式

默认条件下为贪婪模式

1.贪婪:在满足条件情况下尽可能匹配到数据

2.非贪婪:满足条件就可以,在"*","?","+","{m,n}"后面加上?,就能将贪婪变成非贪婪.

代码

代码语言:javascript
复制
#贪婪模式
pattern=re.compile('a.*b')
result=pattern.search('abcabcd')
print(result.group())#abcab

#非贪婪
pattern=re.compile('a.*?b')
result=pattern.search('abcabcd')
print(result.group())#ab

输出:

abcab ab

上面可以看出,贪婪模式要匹配到最后一个b才停止,然而非贪婪模式匹配到第一个b就停止了

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-06-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 日常学python 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一. python正则表达式介绍
  • 二. re模块
    • 2.1 match方法
      • 2.2 匹配规则
        • 2.2.1 匹配字符
        • 2.2.2 分组匹配
        • 2.2.3 限定匹配字符规则
        • 2.2.4 转义字符
    • 三. re中的编译函数
      • 3.1 compile方法
        • 3.2 search方法
          • 3.3 finall方法
            • 3.4 sub方法
              • 3.5 split方法
              • 四. 贪婪模式与非贪婪模式
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档