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

python的正则表达式

文章目录

  • 正则表达式
    • 基本使用
      • 匹配字符串
      • 查找所有匹配
      • 替换字符串
    • 元字符
    • 字符集
    • 分组和引用
    • re.match函数
      • 函数原型
      • 示例
      • 注意事项

正则表达式

Python 的正则表达式(Regular Expression)功能非常强大,它允许你进行复杂的字符串匹配和查找。Python 中使用正则表达式的标准库是 re。

基本使用

下面是一些基本的使用方式:

匹配字符串

import repattern = "abc"
text = "abcdef abcdef"match = re.search(pattern, text)if match:print("找到匹配:", match.group())
else:print("没有找到匹配")

查找所有匹配

import repattern = "abc"
text = "abcdef abcdef abcdef"matches = re.findall(pattern, text)print("找到所有匹配:", matches)

替换字符串

import repattern = "abc"
replace_with = "xyz"
text = "abcdef abcdef abcdef"new_text = re.sub(pattern, replace_with, text)print("替换后的文本:", new_text)

元字符

正则表达式包含一些特殊字符(称为元字符),它们具有特殊的含义:

  • . : 匹配除换行符以外的任意字符
  • ^ : 匹配字符串的开头
  • $ : 匹配字符串的末尾
    • : 匹配前面的子表达式零次或多次
    • : 匹配前面的子表达式一次或多次
  • ? : 匹配前面的子表达式零次或一次
  • {m,n} : 匹配前面的子表达式至少 m 次且最多 n 次

字符集

  • […] : 匹配字符集内的任意一个字符
  • [^…] : 匹配不在括号内的任意字符
  • \d : 匹配一个数字字符,等价于 [0-9]
  • \D : 匹配一个非数字字符,等价于 [^0-9]
  • \w : 匹配包括下划线的任何单词字符,等价于 [A-Za-z0-9_]
  • \W : 匹配任何非单词字符,等价于 [^A-Za-z0-9_]
  • \s : 匹配任何空白字符,包括空格、制表符、换页符等等,等价于 [ \f\n\r\t\v]
  • \S : 匹配任何非空白字符,等价于 [^ \f\n\r\t\v]

分组和引用

  • (…) : 匹配括号内的表达式,也表示一个组
  • \number : 引用编号为 number 的组匹配到的文本

re.match函数

函数原型

re.match(pattern, string, flags=0)
  • pattern: 正则表达式的模式字符串。
  • string: 要匹配的字符串。
  • flags: 可选参数,用于修改正则表达式的匹配方式,如忽略大小写、多行模式等。可能的值包括:
    • re.I: 忽略大小写
    • re.M: 多行模式
    • re.S: 使.匹配包括换行符在内的所有字符
    • re.X: 允许使用空格和#注释正则表达式

示例

import re# 匹配字符串开头的 "Hello"
pattern = "Hello"
string = "Hello, world!"match = re.match(pattern, string)if match:print("找到匹配:", match.group())
else:print("没有找到匹配")

输出将是:

找到匹配: Hello

如果尝试匹配的字符串不是以"Hello"开头,re.match()将返回None。

string = "Hi, world!"
match = re.match(pattern, string)if match:print("找到匹配:", match.group())
else:print("没有找到匹配")

输出将是:

没有找到匹配

注意事项

  • re.match()只匹配字符串的开始部分,如果模式出现在字符串的中间或结尾,它将不会匹配。
  • 如果你想检查整个字符串是否与模式匹配,可以使用re.fullmatch()。
  • 如果你想查找字符串中的所有匹配项,可以使用re.findall()或re.finditer()。

相关文章:

  • 《高性能MYSQL》-架构,锁,事务
  • H264的打包,nal,es,pes,pts,dts,ps,ts
  • 第十四届蓝桥杯大赛B组 JAVA 蜗牛 (递归剪枝)
  • 模版进阶C++
  • AI写的wordpress网站首页模板 你觉得怎么样?
  • [GXYCTF2019]BabyUpload1 -- 题目分析与详解
  • 探讨苹果 Vision Pro 的 AI 数字人形象问题
  • Linux相关小技巧《一》
  • LeetCode每日一题之 移动0
  • C++之结构体以及通讯录管理系统
  • 第四十七回 一丈青单捉王矮虎 宋公明二打祝家庄-强大而灵活的python装饰器
  • 在git中自动把CRLF转换到LF的方法
  • iOS-UILabel调整行间距
  • RK3568开发笔记-qt程序运行报错Failed to move cursor on screen
  • 100243. 将元素分配到两个数组中 I
  • 【挥舞JS】JS实现继承,封装一个extends方法
  • 2018一半小结一波
  • C# 免费离线人脸识别 2.0 Demo
  • Dubbo 整合 Pinpoint 做分布式服务请求跟踪
  • Hexo+码云+git快速搭建免费的静态Blog
  • JavaScript 无符号位移运算符 三个大于号 的使用方法
  • Koa2 之文件上传下载
  • MySQL主从复制读写分离及奇怪的问题
  • opencv python Meanshift 和 Camshift
  • Spring-boot 启动时碰到的错误
  • V4L2视频输入框架概述
  • 大型网站性能监测、分析与优化常见问题QA
  • 分类模型——Logistics Regression
  • 记一次用 NodeJs 实现模拟登录的思路
  • 写代码的正确姿势
  • 赢得Docker挑战最佳实践
  • 2017年360最后一道编程题
  • linux 淘宝开源监控工具tsar
  • shell使用lftp连接ftp和sftp,并可以指定私钥
  • ​3ds Max插件CG MAGIC图形板块为您提升线条效率!
  • #LLM入门|Prompt#2.3_对查询任务进行分类|意图分析_Classification
  • $HTTP_POST_VARS['']和$_POST['']的区别
  • (Oracle)SQL优化技巧(一):分页查询
  • (补)B+树一些思想
  • (附源码)ssm基于微信小程序的疫苗管理系统 毕业设计 092354
  • (原創) 如何使用ISO C++讀寫BMP圖檔? (C/C++) (Image Processing)
  • (转)es进行聚合操作时提示Fielddata is disabled on text fields by default
  • (转载)利用webkit抓取动态网页和链接
  • .[hudsonL@cock.li].mkp勒索病毒数据怎么处理|数据解密恢复
  • .NET delegate 委托 、 Event 事件,接口回调
  • .Net mvc总结
  • .net web项目 调用webService
  • .NET 表达式计算:Expression Evaluator
  • .NET 解决重复提交问题
  • .NET 跨平台图形库 SkiaSharp 基础应用
  • .NET 中的轻量级线程安全
  • .NET简谈设计模式之(单件模式)
  • .stream().map与.stream().flatMap的使用
  • [ HTML + CSS + Javascript ] 复盘尝试制作 2048 小游戏时遇到的问题
  • [ vulhub漏洞复现篇 ] Apache APISIX 默认密钥漏洞 CVE-2020-13945