十四、正则表达式

学习目标

  • 能够描述什么是正则表达式
  • 能够使用re模块查找指定正则格式的字符串
  • 能够说出match,search,findall和finditer方法的区别
  • 能够说出re.Match类的常见属性和方法作用
  • 能够说出常见的正则修饰符
  • 能够说出常见的正则表达模式
    • 单字修饰符
    • 限定修饰符
    • 边界修饰符
  • 能够说出贪婪模式和非贪婪模式的区别
  • 能使用非贪婪模式进行正则匹配

一、正则表达式的介绍

  • 正则表达式是一个特殊的字符序列,计算机科学的一个概念。通常被用来检索、替换哪些符合某个模式(规则)的文本
  • 许多程序设计语言都支持利用正则表达式进行字符串操作。在Python中需要通过正则表达式对字符串进行匹配的时候,可以使用 re模块。re模块使用 Python 语言拥有全部的正则表达式功能
  • 特点:
  1. 灵活性、逻辑性和功能性非常强
  2. 可以迅速地用极简单的方式达到字符串的复杂控制
  3. 对于刚接触的人来说,比较晦涩难懂
# 用来处理字符串,对字符串进行检索和替换的
# 1. 查找    2. 替换
import re

x = 'hello\\nworld' # hello\nworld
# 在正则表达式里,如果想要匹配一个 \ 需要使用 \\\\

# 第一个参数就是正则匹配规则
# 第二个参数表示需要匹配的字符串

# m = re.search('\\\\', x) # match 和 search

# 还可以在字符串前加入一个 r,\\ 就表示 \
m = re.search(r'\\', x)

# search 和 match 方法的执行结果是一个Match类型的对象
print(m) # <re.Match object;span=(5, 6), match='\\'>

二、正则查找相关的方法

# 查找相关的方法
# match 和 search:
# 共同点:1. 只对字符串查询一次  2. 返回值类型都是 re.Match 类型的对象(没有匹配上则返回None)
# 不同点:match 是从头开始匹配,一旦匹配失败,就会方法返回 None;search是在整个字符串里匹配
查找字符串,返回结果是一个 re.Match 对象

# finditer:查找到所有的匹配数据放到一个可迭代对象里(各数据是 re.Match 对象)

# findall:把查找到的所有的字符串放到一个列表里

# fullmatch:完整匹配,字符串需要完全满足正则规则才会有结果,否则就是None


from connections.adc import Iterable
import re
m1 = re.match(r'good','hello world good morning')
print(m1) # None

m2 = re.search(r'hello','hello world good morning')
print(m2) # <re.Match object;span=(0, 5), match='hello'>

# finditer 返回的结果是一个可迭代对象
# 可迭代对象里的数据是匹配到的所有结果,是一个 re.Match 类型的对象
m3 = re.finditer(r'x','fhquhfnxpkmapixok1i')
print(isinstance(m3, Iterable)) # True

for t in m3:
    print(t)    

m4 = re.findall(r'x\d+','xqofho1cxhjax123x14')
print(m4) # 以x开头且带数字元素组成的列表

m5 = re.fullmatch(r'hello world', 'hello world')

三、re.Match类

当我们调用 re.match 方法、re.search 方法、或者对 re.finditer 方法的结果进行迭代时,拿到的数据类型都是 re.Match 对象

import re

m = re.search(r'm,'sdafhiwmkom')

# 匹配到的结果字符串的开始和结束下标
print(m.span()) 

# 使用group方法可以获取匹配的字符串结果
# group 可以传参,表示第 n 个分组
print(m.group()) # m
print(m.group(0)) # m
print(m.group(1)) # IndexError:no such group

# group方法表示正则表达式的分组
# 1. 在正则表达式里使用()表示一个分组
# 2. 如果没有分组,默认只有一组

相关推荐

  1. 表达式

    2024-07-21 11:34:04       19 阅读
  2. 表达式

    2024-07-21 11:34:04       57 阅读
  3. 表达式

    2024-07-21 11:34:04       67 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-21 11:34:04       52 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-21 11:34:04       54 阅读
  3. 在Django里面运行非项目文件

    2024-07-21 11:34:04       45 阅读
  4. Python语言-面向对象

    2024-07-21 11:34:04       55 阅读

热门阅读

  1. 【笔记-软考】架构演化

    2024-07-21 11:34:04       16 阅读
  2. 每天一个数据分析题(四百三十九)- 用户画像

    2024-07-21 11:34:04       17 阅读
  3. SpinalHDL之总线

    2024-07-21 11:34:04       15 阅读
  4. C# 中的事件

    2024-07-21 11:34:04       18 阅读
  5. 【分布式存储系统HDFS】架构和使用

    2024-07-21 11:34:04       17 阅读
  6. sugarhosts优惠码,国外免备案建站解决方案!

    2024-07-21 11:34:04       14 阅读
  7. SparseArray 你不知道的东西

    2024-07-21 11:34:04       16 阅读
  8. Python面试题:Python中的记忆化与缓存技术

    2024-07-21 11:34:04       15 阅读
  9. nginx的配置

    2024-07-21 11:34:04       14 阅读
  10. Choosing The Commander

    2024-07-21 11:34:04       18 阅读
  11. 测试人员如何进行需求分析

    2024-07-21 11:34:04       18 阅读