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("----------------------")
相关推荐
路边草随风4 小时前
milvus向量数据库使用尝试
人工智能·python·milvus
newobut4 小时前
vscode远程调试python程序,基于debugpy库
vscode·python·调试·debugpy
APIshop4 小时前
用 Python 把“API 接口”当数据源——从找口子到落库的全流程实战
开发语言·python
一点晖光5 小时前
Docker 作图咒语生成器搭建指南
python·docker
smj2302_796826525 小时前
解决leetcode第3768题.固定长度子数组中的最小逆序对数目
python·算法·leetcode
木头左5 小时前
位置编码增强法在量化交易策略中的应用基于短期记忆敏感度提升
python
Acc1oFl4g6 小时前
详解Java反射
java·开发语言·python
ney187819024747 小时前
分类网络LeNet + FashionMNIST 准确率92.9%
python·深度学习·分类
Data_agent8 小时前
1688获得1688店铺列表API,python请求示例
开发语言·python·算法
2401_871260028 小时前
Java学习笔记(二)面向对象
java·python·学习