正则表达式常用操作符:

操作符 说明 实例
. 表示任何单个字符,不包括换行符
[] 字符集,对单个字符给出取值范围 [abc]表示a、b、c,[a-z]表示a到z单个字符
[^ ] 非字符集 [^abc]表示非a或b或c
* 前一个字符0次或无限次扩展 abc*表示ab、abc、abcc、abccc、……
+ 前一个字符一次或无限次扩展 abc+表示abc、abcc、abccc、……
前一个字符0次或1次扩展 abc?表示ab、abc
| 左右表达式任意一个 abc|def表示abc、def
{m} 扩展前一个字符m次 ab{2}c表示abbc
{m,n} 扩展前一个字符m至n次(含n) {ab{1,2}c表示abc、abbc
^ 匹配字符串开头 ^abc表示abc且在一个字符串的开头
$ 匹配字符串结尾 abc$表示abc且在一个字符串的结尾
() 分组标记,内部只能有|操作符 (abc)表示abc,(abc
\d 数字
\w 单词字符,等价于[A-Za-z0-9]
import re

常用方法

re库常用方法:

函数 说明
re.search() 在一个字符串中搜索匹配正则表达式的第一个位置,返回match对象
re.match() 从一个字符串的开始位置起匹配正则表达式,返回match对象
re.findall() 搜索字符串,以列表类型返回全部能匹配的子串
re.split() 将字符串按照正则表达式匹配结果进行分割,返回列表类型
re.finditer() 搜索字符串,返回一个匹配结果的迭代类型,每个迭代元素是match对象
re.sub() 在一个字符串中替换所有匹配正则表达式的子串,返回替换后的字符串

flags:正则表达式使用时的控制标记

常用标记 说明
re.I re.IGNORECASE 忽略大小写,[A-Z]可以匹配小写字母
re.M re.MULTILINE ^操作符能够将给定的字符串每行都当作匹配开始
re.S re.DOTALL .操作符能够匹配所有字符,包括换行符
  • re.search(pattern, string, flags=0)
s = "abc 123 abc 456"
match = re.search("\d+", s)
print("match的类型:", type(match))
print("匹配的子串:", match.group(0))
    match的类型: <class 're.Match'>
匹配的子串: 123
  • re.match(pattern, string, flags=0)
s = "123 abc"
match = re.match("\d+", s)
print("match的类型:", type(match))
print("匹配的子串:", match.group(0))
print("----------------") s = "abc 123 abc"
match = re.match("\d+", s)
print("match的类型:", type(match))
try:
print("匹配的子串:", match.group(0))
except:
pass
    match的类型: <class 're.Match'>
匹配的子串: 123
----------------
match的类型: <class 'NoneType'>
  • re.findall(pattern, string, flags=0)
s = "abc 123 456 bcd 23 dsssa12"
match = re.findall("1\d+", s) # 以1开头的数字
match
    ['123', '12']
  • re.finditer(pattern, string, flags=0)
s = "abc 123 456 bcd 23 dsssa12"
match = re.finditer("1\d+", s)
while True:
try:
print(next(match).group(0))
except:
break
    123
12
  • re.split(pattern, string, maxsplit=0, flags=0)

maxsplit:最大分隔数,将剩余部分作为一个整体当作最后一个元素,默认的0表示最大分隔

s = "abc 123 456 bcd 23 dsssa12"
match1 = re.split("\d{2}", s) #以连续的两个数字作为分隔条件
match2 = re.split("\d{2}", s, maxsplit=2) #以连续的两个数字作为分隔条件
print(match1, match2)
    ['abc ', '3 ', '6 bcd ', ' dsssa', ''] ['abc ', '3 ', '6 bcd 23 dsssa12']
  • re.sub(pattern, repl, string, count=0, flags=0)

repl:将匹配的子串换成该字符串

s = "abc 123 456 bcd 23 dsssa12"
s1 = re.sub("[0-9][^a-z]*", "**", s)
s2 = re.sub("[0-9][^a-z]*", "**", s, count=2)
print(s1, s2, sep='\n')
    abc **bcd **dsssa**
abc **bcd **dsssa12
  • re.compile(pattern, flags=0)
s = "abc 123 456 bcd 23 dsssa12"
pat = re.compile("\d+") rst = pat.search(s)
print(rst.group(0)) rst = pat.findall(s)
print(rst)
    123
['123', '456', '23', '12']

match对象的属性和方法

s = "sdf 123 asd"
match = re.search("\d+", s) print(match.string) # 被匹配的文本
print(match.re) # 匹配时使用的pattern对象
print(match.pos) # 从该位置开始搜索的文本
print(match.endpos) # 搜索文本的结束位置
print(match.group(0)) # 一般的正则表达式使用group(0)就可以获得匹配的字符串
print(match.start()) # 匹配的字符串在原字符串中的起始位置
print(match.end()) # 匹配的字符串在原字符串中的结束位置
print(match.span()) # 起始和结束位置的元组
    sdf 123 asd
re.compile('\\d+')
0
11
123
4
7
(4, 7)

贪婪匹配和最小匹配

s = "PYANBNCNDN"
match = re.search("PY.*N", s)
print(match.group(0))
    PYANBNCNDN

对于代码中的模式串和字符串,正则匹配可以有"PYAN"、"PYANBN"、"PYANBNCN"、"PYANBNCNDN"些个匹配结果。

而上述代码说明re库默认是贪婪匹配,即输出最长的子串。

下面将贪婪模式改成最小模式:

操作符 说明
*? 将*扩展为最小匹配
+? 将+扩展为最小匹配
?? 将?扩展为最小匹配
{m,n}? 将{m,n}扩展为最小匹配

当我们发现一个模式串中的每个操作符可匹配不同长度的子串时,我们都可以在该操作符的后面添加?来获得最小匹配。

match = re.search("PY.*?N", s)
print(match.group(0))
    PYAN

Python正则表达式re库的初次使用入门的更多相关文章

  1. python正则表达式re库(自用)

    经典例子: 1.由26个字母组成的字符串 ^[A-Za-z]+$ 2. 中国境内邮政编码 [1-9]\d{5} 3.IP地址 0-99:[1-9]?\d 100-199:1\d{2} 200-249: ...

  2. [转] Python正则表达式指南

    本文介绍了Python对于正则表达式的支持,包括正则表达式基础以及Python正则表达式标准库的完整介绍及使用示例.本文的内容不包括如何编写高效的正则表达式.如何优化正则表达式,这些主题请查看其他教程 ...

  3. Python 正则表达式学习笔记

    本文介绍了Python对于正则表达式的支持,包括正则表达式基础以及Python正则表达式标准库的完整介绍及使用示例.本文的内容不包括如何编写高效的正则表达式.如何优化正则表达式,这些主题请查看其他教程 ...

  4. Python正则表达式指南(转)

    目录 Python正则表达式指南(转) 0.防走丢 1. 正则表达式基础 1.1. 简单介绍 1.2. 数量词的贪婪模式与非贪婪模式 1.3. 反斜杠的困扰 1.4. 匹配模式 2. re模块 2.1 ...

  5. 7.Python 正则表达式学习笔记

    本文介绍了Python对于正则表达式的支持,包括正则表达式基础以及Python正则表达式标准库的完整介绍及使用示例.本文的内容不包括如何编写高效的正则表达式.如何优化正则表达式,这些主题请查看其他教程 ...

  6. python正则表达式re模块详细介绍--转载

    本模块提供了和Perl里的正则表达式类似的功能,不关是正则表达式本身还是被搜索的字符串,都可以是Unicode字符,这点不用担心,python会处理地和Ascii字符一样漂亮. 正则表达式使用反斜杆( ...

  7. python正则表达式教程

    原文这里,非常实用,转载一下 再来一篇,两篇一起看,美滋滋 本文介绍了Python对于正则表达式的支持,包括正则表达式基础以及Python正则表达式标准库的完整介绍及使用示例.本文的内容不包括如何编写 ...

  8. 转:Python正则表达式指南

    本文介绍了Python对于正则表达式的支持,包括正则表达式基础以及Python正则表达式标准库的完整介绍及使用示例.本文的内容不包括如何编写高效的正则表达式.如何优化正则表达式,这些主题请查看其他教程 ...

  9. Python 正则表达式入门(中级篇)

    Python 正则表达式入门(中级篇) 初级篇链接:http://www.cnblogs.com/chuxiuhong/p/5885073.html 上一篇我们说在这一篇里,我们会介绍子表达式,向前向 ...

随机推荐

  1. 8、基本数据类型(dict)

    8.1.字典: 1.字典元素用大括号括起来,用逗号分割每个元素,字典元素是"key:value"的形式 dic = { "k1": 'v1', #键值对 &qu ...

  2. 【PC桌面软件的末日,手机移动端App称王】写在windows11支持安卓,macOS支持ios,龙芯支持x86和arm指令翻译

    面对这场突如其来的变革,作为软件开发者,应该如何选择自己今后的发展方向?桌面软件开发领域还有前景吗? 起源 自从苹果发布m1处理器,让自家Mac支持IOS移动端app运行之后,彻底打破了移动端app和 ...

  3. AD设计中地铜突然消失且无法选中删除的解决办法

    作者:struct_mooc 博客地址: https://www.cnblogs.com/structmooc/p/14984466.html   前几天在设计一块电路板的时候,已经全部设计完了!但是 ...

  4. 230th Weekly Leetcode Contest

    题目二 题目描述 5690. 最接近目标价格的甜点成本  难度:中等-中等 题解 解法一:三进制状态压缩 考虑到baseCosts.toppingCosts的长度最多都为10,每一种辅料都有加0.1. ...

  5. redis-list实现

    Redis 数据结构---链表 Redis的list底层实现使用的不是数组而是链表的数据结构 叫listnode  是一个双向链表 ListNode{ Struct listNode *prev  / ...

  6. 资源:Redis下载地址

    Redis的下载路径 http://download.redis.io/releases/  3.x(支持集群)  2.x不支持集群   (推荐使用3.0+版本)     副版本号为偶数时,表示是稳定 ...

  7. Https:SSL双向认证机制(理论知识)

    1.基础知识 这部分内容主要解释一些概念和术语,最好是先理解这部分内容. 1.1.公钥密码体制(public-key cryptography) 公钥密码体制分为三个部分,公钥.私钥.加密解密算法,它 ...

  8. kali安装angr

    最近打算重新学习一波angr,先把环境搭好 1. 先安装virtualenv,这玩意是可以创建一个纯净的python环境,我陷入了沉思,pyenv好像也可以 这里利用豆瓣的源下载,非常快而且很舒服 p ...

  9. DawgCTF wp(re和crypto)

    简单写写思路,想看详解的..我脚本有些丢失了..师傅请移步. 挂了个vpn,算正式打这种国际赛,全是英文.上去打了两天,昨晚晚上划水了一晚上补作业...,re那时候写出来三道,Potentially ...

  10. 整理C#获取日期显示格式

    C#获取当前日期的几种显示格式 有时候需要用一些不常用的日期格式时,总是要去网上查找,很多都是复制粘贴,还不完整.就整理一下. DatetimeTextBox.Text += DateTime.Now ...