【Python】正则re的使用

本文介绍了如何在Python中使用正则re模块进行字符串匹配,包括常用正则模式串编写、匹配函数re.match和re.findall的应用实例,以及可选标志和边界符的使用技巧。通过查找特定模式的blender文件和电子邮件验证,展示了正则表达式在实际问题中的强大作用。
摘要由CSDN通过智能技术生成

【Python】正则re的使用

一、正则re

  1. 正则是什么

    • 字符串匹配
    • 从一堆字符串中查找符合条件的字符串
    • 正则表达式:特殊的字符序列,检查一个字符串是否与某种模式匹配
    • re 模块:拥有全部的正则表达式功能
  2. 正则表达式使用

    • 常用的正则模式串编写 (pattern)
    • 使用模式串进行匹配
    • re.match(pattern, string, flags=0)
      • pattern: 模式串
      • string: 需要被查找的字符串
      • flags: 正则表达式的匹配方式 (如:是否区分大小写,多行匹配等等)
      • 如果匹配成功则返回匹配对象,否则返回None
    • re.findall(pattern, string, flags=0)
      • 在string中查找所有子串,返回一个列表;没有找到匹配,返回空列表
      • match只查找一次,findall匹配所有
  3. 神一样的(.*?)

    • .* 表示任意匹配除换行符(\n、\r)之外的任何单个或多个字符
    • (.*?) 表示"非贪婪"模式,只保存第一个匹配到的子串
  4. 可选标志(flags)

    可选标志修饰符用于控制匹配的模式。多个标志可以通过按位 OR(|) 它们来指定。(如 re.I | re.M 被设置成 I 和 M 标志)

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

  6. 案例: 字符串

s = '''abcd-摩托车.blend\n-----1234-大象.blend\n----efg-卡车.blend\n----5678-蘑菇.blend\n---'''
import re
#   - 只提取前面有数字的  blender文件信息

pattern = r"[0-9]+.+\.blend"
pattern = r"-([0-9]+.*?)\n"

res = re.findall(pattern=pattern, string=s)
print(res)

常用的正则模式串编写 (pattern)

  • 单字符:
    • “.” 匹配一个任意字符
    • [] 匹配中括号内的一个字符
    • “\d” 匹配数字0-9中的一个 digital
    • “\D” 匹配非数字的任意一个字符
    • “\s” 匹配一个空白符 如 空格、制表符 space
    • “\S” 匹配非空白符的任意一个字符
    • “\w” 匹配字母+数字,即a-z+A-Z+0-9中 的一个 word
    • “\W” 匹配非字母非数字的任意一个字符
  • 数量符:
    • “*” 前一个字符出现次数任意
    • “+” 前一个字符出现次数 ≥ 1
    • “?” 前一个字符出现次数 ≤ 1
    • {m} 前一个字符出现次数 = m
    • {m,} 前一个字符出现次数 ≥ m
    • {m,n} m ≤ 前一个字符出现次数 ≤ n
  • 边界符:
    • ^ 开始标记
    • & 结束标记
    • \b 单词 边界
    • \B 非单词 边界
import re

email1 = "karrycharon@qq.com"
email2 = "karrycharon@163.net"
email3 = "邮箱--karrycharon@163.com"
email4 = "karrycharon@qqcom"
# .net结尾   中文开头   没有@  没有.
pattern = r'^[a-zA-Z0-9]+@[a-zA-Z0-9]+\.com$'
res = re.findall(pattern=pattern, string=email1)
print("emil1:", res)
res = re.findall(pattern=pattern, string=email2)
print("emil2:", res)
res = re.findall(pattern=pattern, string=email3)
print("emil3:", res)
res = re.findall(pattern=pattern, string=email4)
print("emil4:", res)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值