Python进阶知识:整理6 -> 正则表达式

1 基础匹配用法

python 复制代码
# 演示Python中正则表达式re模块的3个基础匹配方法
import re
# 1. match()方法  从头匹配
string = "hello world"
result = re.match("hello", string)   # 如果头部没有匹配成功就直接失败了,后面就不会继续匹配了
print(result)
print(result.group())
print(result.span())
print("--------------------")



# 2. search()方法  搜索匹配
s1 = "python11888999python"
result = re.search("python", s1)   # 搜索整个字符串,找到第一个匹配的,并返回结果
print(result)
print(result.group())
print(result.span())
print("----------------------")




# 3. findall()方法  搜索匹配所有,返回一个列表
s2 = "python11888999python"
result = re.findall("python", s2)
print(result)
print("--------------------")

2 元字符匹配

python 复制代码
"""
    字符            功能
     .             匹配任意1个字符(除了\n), \. 匹配点本身
     [...]         匹配[]中列举的字符, 字符集合, [0-9a-zA-Z_], [a-z], [0-9], [...]
     \d            匹配数字, [0-9]的简写
     \D            匹配非数字, [^0-9]的简写
     \w            匹配字母或数字或下划线, [a-zA-Z0-9_]的简写
     \W            匹配非(字母或数字或下划线), [^a-zA-Z0-9_]的简写
     \s            匹配空白, [ \t\n\x0b\r]的简写, 即空格, tab键
     \S            匹配非空白, [^ \t\n\x0b\r]的简写
     [^...]        匹配除了[]中列举的字符之外的字符, 反向字符集合, [^0-9], [^a-zA-Z_]
"""

import re
s = "itheima @@ Python2 !!999 # It"
result = re.findall(r"\d", s)    # 加上 r 可以表示字符串中的转义字符无效
print(result)
print("---------------------")

result2 = re.findall(r"\W", s)  # 非单词字符
print(result2)
print("---------------------")

# 匹配所有的英文字母
result3 = re.findall(r"[a-zA-Z]", s)
print(result3)


"""
    数量匹配:
     *             匹配*号 前的字符 0次或无数次
     +             匹配+号 前的字符 1次或无数次
     ?             匹配?号 前的字符 0次或1次
     {m}           匹配{m} 前的字符 出现m次
     {m,}          匹配{m} 前的字符 出现最少m次
     {m,n}         匹配{m,n} 前的字符 出现 m到n次
"""

"""
    边界匹配:
     ^             匹配一行字符串的开头
     $             匹配一行字符串的结束
     \b            匹配一个单词的边界
     \B            匹配非单词边界
"""

"""
    分组匹配:
      |            匹配左右任意一个表达式
     (...)         分组, 将 ()中的内容作为一组, (abc.efs), (a|b|c)   
"""




# 案例:  (注意: 正则表达式中千万不要随意价格空格)
# 1. 匹配账号: 只能由字母数字组成,长度限制6-10位
r = '^[a-zA-Z0-9]{6,10}$'
s = '1232dfgf'
result = re.findall(r, s)
print(result)
print('---------------------')



# 2. 匹配QQ号, 要求纯数字, 长度5-11,第一位不为0
r = '^[1-9][0-9]{4,10}$'    # {4,10} 开头已经占了一位了
s_qq = '329809378'
result_qq = re.findall(r, s_qq)
print(result_qq)
print('---------------------')




# 3. 匹配邮箱地址,只允许请qq 、163、gmail这三种邮箱地址
# abc.ghs.edu@qq.com
# abc.ghs.edu@qq.jsx.ss.com
# abc.@163.com
r = '^[\w-]+(\.[\w-]+)*@(qq|163|gmail)(\.[\w-]+)+$'
s = 'abc.ghs.edu@qq.com'
result = re.findall(r, s)   # findall  会返回正则中的分组 ()   -> [('.edu', 'qq', '.com')]
# 所以需要整体再放入一个组中
r = '(^[\w-]+(\.[\w-]+)*@(qq|163|gmail)(\.[\w-]+)+$)'
result_all = re.findall(r, s)
result_match = re.match(r, s)
print(result_match)
print(result_all)
print("----------------------")
相关推荐
武天旭15 小时前
AI安全--AI大模型的毒性偏见与安全对齐实践
人工智能·python·深度学习
视觉小萌新16 小时前
AI Class 3 · Chapter 2-3:函数、异常、文件读写+JSON / JSONL 读写(小白版)
人工智能·python·json
小小张说故事17 小时前
Python 的 obj.x 到底按什么顺序找?拆开数据描述符、实例字典和 __getattr__ 那条优先级链
python
用户114818678948418 小时前
水印的实现方式逻辑
前端·python
贾公子18 小时前
从单条内容到账号维度——AIGC 风险评分的工程实现
后端·python
木头左20 小时前
【Python】不点浏览器发博客:逆向 CSDN 创作中心接口做 md-publish 技能
python·自动化·api
Tt有了t20 小时前
设计模式速查
java·python·设计模式
deepseek2321 小时前
Python日志拖慢请求?QueueHandler排队、丢失与退出实测
python·性能优化·logging·后端开发·queuehandler
用户912940468484221 小时前
Codex 从零到能交付(05):第一次改代码:生成一个文件清单脚本
python
Dmz丶21 小时前
前端转 AI 100 天 Day 38:Token 管理与成本优化——别让 API 账单爆炸
python