当前位置: 首页 > article >正文

python 正则表达式re 模块的基本使用方法

目录

  • 一、正则化表达式语法
    • 1、如下表格:
    • 2、元字符
  • 二、re模块常用方法
    • 1、compile
    • 2、findall
    • 3、search
    • 4、match
    • 5、split
    • 6、sub
    • 7、finditer

一、正则化表达式语法

1、如下表格:

语法意义
.匹配除换行外的任意字符(如果DOTALL则连换行也匹配)
^匹配字符串开始 (如果MULTILINE,也匹配换行符之后)
$匹配字符串结束(如果MULTILINE,也匹配换行符之前)
*匹配0个或更多个由前面的正则表达式定义的片段,贪婪方式(尽可能多的匹配)
+匹配1个或更多个由前面的正则表达式定义的片段,贪婪方式
?匹配0个或1个由前面的正则表达式定义的片段,贪婪方式
*?, +?,??非贪婪版本的*, +, 和? (尽可能少的匹配)
{m,n}匹配mn次由前面的正则表达式定义的片段,贪婪方式
{m,n}?匹配mn次由前面的正则表达式定义的片段,非贪婪方式
[…]匹配方括号内内的字符集中的任意一个字符
|等于“或”
(…)匹配括号内的表达式,也表示一个组
/number匹配先前匹配过的组(通过序号,组自动从1 - 99编号)
/A匹配字符串开始
/b匹配单词边界
/B匹配一个空串(非单词边界)
/d匹配任意数字等价于[0-9]
/D匹配任意非数字等价于[^\d]
/s匹配任意空白字符
/S匹配任意非空字符
/w匹配字母数字
/W匹配非字母数字
/Z匹配字符串结束
//匹配反斜杠

2、元字符

① . 通配符(除了 \n不能匹配,可以匹配其他任意一个字符)
② ^ 以该字符串开头
③ $ 以该字符串结尾
④ * 重复前一个字符,0~无穷次
⑤ + 重复前一个字符,1~无穷次在这里插入代码片
⑥ ? 匹配前一个字符,0~1个
⑦ { } 自定义重复范围,例:
{0,} 重复0~无穷次
{1,2} 重复1~2次
{6} 重复6次
注:默认上述元字符均为贪婪匹配,后面加 ?,变为惰性匹配

import re

v1 = re.findall("a..b", "baasbartb")
print(v1)  # ['aasb', 'artb']
v2 = re.findall("^ba", "baasbartb")
print(v2)  # ['ba']
v3 = re.findall("tb$", "baasbartb")
print(v3)  # ['tb']
v4 = re.findall("a*", "baasbartb")
print(v4)  # ['', 'aa', '', '', 'a', '', '', '', '']
v5 = re.findall("a+", "baasbartb")
print(v5)  # ['aa', 'a']
v6 = re.findall("a?", "baasbartb")
print(v6)  # ['', 'a', 'a', '', '', 'a', '', '', '', '']
v7 = re.findall("a{1,2}", "baasbartaaab")
print(v7)  # ['aa', 'a', 'aa', 'a']
v8 = re.findall("a{1,2}?", "baasbartaaab")
print(v8)  # ['a', 'a', 'a', 'a', 'a', 'a']

二、re模块常用方法

1、compile

将正则表达式的样式编译为一个 正则表达式对象 (正则对象),可以用于匹配,通过这个对象的方法 match(), search() 以及其他如下描述。

序列

co = re.compile("\d+")
v = co.findall("wded123fw54") # v = re.findall(co,"wded123fw54")也可以
print(v)    # ['123', '54']

等价于

v = re.findall("\d+", "wded123fw54")
print(v)    # ['123', '54']

如果需要多次使用这个正则表达式的话,使用 re.compile() 和保存这个正则对象以便复用,可以让程序更加高效。

2、findall

返回所有满足匹配条件的结果,放在列表里。

import re

v1 = re.findall("\d+", "wded123fw54")
print(v1)  # ['123', '54']

3、search

只返回第一个查到结果,构成的对象。可通过group方法得到匹配的字符串。没查到结果,返回None

v2 = re.search("\d+", "wded123fw54").group()
print(v2)  # 123

v3 = re.search("\d{5}}", "wded123fw54")
print(v3)   # None

4、match

类似search,但只从字符串开头匹配。

v = re.match("\d+", "wded123fw54")
print(v)  # None

5、split

分割

v1 = re.split('\d+',"wded123fw54")
print(v1)  # ['wded', 'fw', '']

v2 = re.split('\d+',"wded123fw54a",1)
print(v2)  # ['wded', 'fw54a']

6、sub

替换

v1 = re.sub('\d+',"A","wded123fw54")
print(v1)  # wdedAfwA

v2 = re.sub('\d+',"A","wded123fw54",1)
print(v2)  # wdedAfw54

7、finditer

类似findall方法,但是返回的是一个迭代器

v1 = re.finditer("\d+", "wded123fw54")
print(v1)  # <callable_iterator object at 0x000002676E7004C0>
print(v1.__next__().group())    # 123
print(v1.__next__().group())    # 54

更多re用法可查询官网:https://docs.python.org/zh-cn/3/library/re.html#re.purge


http://www.kler.cn/a/407946.html

相关文章:

  • 数字信号处理(Digital Signal Procession)总结
  • 【100ask】IMX6ULL开发板用SPI驱动RC522模块
  • 【电源专题】BUCK电源SW电压的平均值为什么等于输出电压?
  • Python Selenium:Web自动化测试与爬虫开发
  • CentOS7 如何查看kafka topic中的数据
  • Java-06 深入浅出 MyBatis - 一对一模型 SqlMapConfig 与 Mapper 详细讲解测试
  • Spark 中 RDD checkpoint 是通过启动两个独立的 Job 完成的。
  • Spring Boot驱动的高效OA解决方案
  • nc网络工具的使用
  • 《Python编程实训快速上手》第八天--组织文件
  • 订单日记为“惠采科技”提供全方位的进销存管理支持
  • linux安装cyberRT6.0
  • 【Linux驱动开发】驱动中的信号 异步通知开发
  • Kotlin:后端开发的新宠
  • 面试经典 150 题:205,55
  • 【Linux 报错】SSH服务器拒绝了密码。请再试一次
  • 【Spring编程常见错误50例】04. Spring Bean 生命周期常见错误-上
  • 软件工程导论 选填题知识点总结
  • ArcGIS Pro 3.4新功能1:唯一值符号化增加复选框,可在内容窗格和布局视图中控制类别的可见性。
  • 实现一个string的indexof方法,给出时空复杂度估计
  • HarmonyOS Next原创项目
  • 乐理的学习(调式)
  • 通过socket设置版本更新提示
  • 鸿蒙HarmonyOS学习笔记(1)
  • 工程师 - 智能家居方案介绍
  • 符号有向图(Signed Directed Graph, SDG)的前世今生