目录

前言

正则表达式

行定位符

1.^

2.$

元字符

常见的元字符

限定符

常用的限定符

字符类

排除字符

选择字符

转义字符

()

python使用正则表达式

匹配字符串

match()

search()

findall()

sub()

替换敏感字符

split()


前言

正则表达式(Regular Expression),又称规则表达式,它不是某个编程语言所特有的,是计算机科学的一个概念,通常被用来检索和替换符合某些规则的文本。

正则表达式

行定位符

1.^

表示行的开始

2.$

表示行的结尾

举例

^py该表达式表示要匹配字符串py的开始位置是行头,如py equal python可以匹配而python equal py不能匹配

py$后者可以匹配,前者不能,如果要匹配的字符串可以出现在字符串的任意部分,那么可以直接写成py

元字符

常见的元字符

元字符 说明
. 匹配除换行符以外的任意字符
\w 匹配字母或数字或下划线或汉字
\s 匹配任意的空白符
\d 匹配数字
\b 匹配单词的开始或结束
^ 匹配字符串的开始
$ 匹配字符串的结束

限定符

如果想匹配特定数量的数字,需要使用限定符(指定数量的字符)来实现,例如匹配8位QQ号就是:^\d{8}$

^表示行的开始,\d表示匹配数字,{8}就是限定符表示匹配前面的字符8次,$表示行的结束

常用的限定符

限定符 说明 举例
匹配前面的字符零次或一次 pytho?n,可以匹配为python或pythn
+ 匹配前面的字符一次或多次 py+thon,可以匹配为python到pyy...thon
* 匹配前面的字符零次或多次 py*thon,可以匹配为pthon到pyy...thon
{n} 匹配前面的字符n次 py{2}thon,只能匹配pyython
{n,} 匹配前面的字符最少n次 py{2,,}thon,可以匹配pyython到pyy...thon
{n,m} 匹配前面的字符最少n次,最多m次 python{0,2},可以匹配pytho、python、pythonn三种情况

字符类

正则表达式查找数字和字母是简单的事,因为有元字符,但是如果没有预定义元字符的字符合集(比如元音字母),那该怎么办呢?

也简单,在方括号里列出他们,[aeiou]就是匹配元音字母,[0-9]代表的含义就和\d完全一致,代表一个数字,[a-z0-9A-Z_]等同于\w(不考虑汉字),如果想匹配任意一个汉字,可以使用[\u4e00-\u9fa5],匹配多个汉字,只需在前面的基础上加个+即[\u4e00-\u9fa5]+

排除字符

匹配不符合指定字符集合的字符串,^放在方括号表示排除的意思

举例

[^a-zA-Z]表示匹配一个不是字母的字符

选择字符

如果我们想要它匹配的结果是多种,就需要使用选择字符(|)该字符是或的意思

举例

身份证的长度为15位或18位,其中15位全为数字,18位分为全为数字和前17位为数字最后一位可能是数字或字符X,那么匹配的表达式可写为:

(^\d{15}$)|(^\d{18}$)|(^\d{17})(\d|X|x)$

转义字符

转义字符的作用就是将特殊字符(如“.”“?”“\”)变为普通的字符,例如匹配QQ邮箱:

^[1-9]\d{4,10}@qq\.com$

括号在正则表达式也算是元字符

()

作用一:改变限定符的作用范围

作用二:分组,也就是子表达式(\.[0,9]{1,4}){4},就是对其进行重复操作

python使用正则表达式

匹配字符串

match()

从字符串的开始处进行匹配,如果起始位置匹配成功,则返回Match对象,否则返回None。语法格式如下:

re.match(pattern,string,[flags])

pattern:表示模式字符串,由要匹配的正则表达式转换而来

string:表示要匹配的字符串

flags:表示标志位,用于控制匹配方式,如是否区分字母大小写

常用标志

标志 说明

A或ASCII

对\w,\b,\d,\s只进行ASCII匹配
I或IGNORECASE 不区分字母大小写
M或MULTILINE 将^和$用于包括整个字符串的开始和结尾的每一行
S或DOTALL 使用“.”字符匹配所有字符,包括换行符
X或VERBOSE 忽略模式字符串中未转义的空格和注释

举例

匹配字符串是否以“mr_”开头,不区分字母大小写

代码

import re
pattern='mr_\w+'
string='MR_SHOP mr_shop'
match=re.match(pattern,string,re.I)
print(match)
print('匹配值的起始位置:',match.start())
print('匹配值的结束位置:',match.end())
print('匹配位置的元组:',match.span())
print('要匹配的字符串:',match.string)
print('匹配数据:',match.group())
string='名称 MR_SHOP mr_shop'
match=re.match(pattern,string,re.I)
print(match)

执行结果

search()

在整个字符串中搜索第一个匹配的值,如果在起始位置匹配成功,则返回Match(),否则返回None,语法格式如下:

re.search(patter,string,[flags])

pattern:表示模式字符串,由要匹配的正则表达式转换而来

string:表示要匹配的字符串

flags:表示标志位,用于控制匹配方式,如是否区分字母大小写

举例

搜索第一个以“mr_”开头的字符串,不区分字母大小写

代码

import re
pattern='mr_\w+'
string='MR_SHOP mr_shop'
search=re.search(pattern,string,re.I)
print(search)
string='名称 MR_SHOP mr_shop'
search=re.search(pattern,string,re.I)
print(search)

执行结果

findall()

在整个字符串中搜索 所有符合正则表达式的字符串,并以列表的形式返回,如果匹配成功,则返回包含匹配结构的列表,否则返回空列表,语法格式如下:

re.findall(pattern,string,[flags])

pattern:表示模式字符串,由要匹配的正则表达式转换而来

string:表示要匹配的字符串

flags:表示标志位,用于控制匹配方式,如是否区分字母大小写

举例

搜索以“mr_”开头的字符串

代码

import re
pattern='mr_\w+'
string='MR_SHOP mr_shop'
findall=re.findall(pattern,string,re.I)
print(findall)
string='名称 MR_SHOP mr_shop'
findall=re.findall(pattern,string)
print(findall)

执行结果

sub()

实现字符串替换,语法格式如下:

re.sub(patter,repl,string,count,flags)

pattern:表示模式字符串,由要匹配的正则表达式转换而来

repl:表示替换的字符串

string:表示要被查找替换的原始字符串

count:可选参数,表示模式匹配后替换的最大次数,默认值为0

flags:表示标志位,用于控制匹配方式,如是否区分字母大小写

举例

隐藏快递里的手机号码

代码

import re
pattern='1[34578]\d{5}'
string='快递号:7-1563 联系电话:18888358853'
result=re.sub(pattern,'1XXXXXX',string)
print(result)

执行结果

替换敏感字符

代码

import re
pattern='淘宝'
string='我在淘宝买东西'
result=re.sub(pattern,'某宝',string)
print(result)

执行结果

split()

根据正则表达式分割字符串,并以列表的形式返回,语法格式如下:

re.split(pattern,string,[maxsplit],[flags])

pattern:表示模式字符串,由要匹配的正则表达式转换而来

string:表示要匹配的字符串

maxsplit:可选参数,表示最大的拆分次数

flags:表示标志位,用于控制匹配方式,如是否区分字母大小写

举例

对给定的url地址中提取请求地址和各个参数

代码

import re
pattern='[?|&]'
url='http://www.baidu.com/login?username="zhangsan"&pwd="password"'
result=re.split(pattern,url)
print(result)

执行结果

【python】一篇玩转正则表达式相关推荐

  1. 杨洋python课程提高篇_杨洋老师《全民一起玩Python 基础篇+提高篇》

    全民一起玩Python 基础篇+提高篇 适用人群: 想用轻松系统的方式,从零开始真正理解掌握Python.进而学习办公.网抓.数据.AI.网站等技术的各界人士 课程概述: 制作精细.自带吐槽,每节课程 ...

  2. 杨洋python课程提高篇_杨洋老师:全民一起玩Python 基础篇+提高篇,老师幽默严谨不枯燥的学习编程...

    课程介绍 本套课程出自杨洋老师的全民一起玩Python 基础篇+提高篇官网售价299元,程保持了杨洋博士老师幽默严谨不枯燥的学习编程,清晰全面的授课风格,配有丰富的教学演示和插图.动画,是初学者学习P ...

  3. Python基础篇【第十篇】:正则表达式

    Python正则表达式 正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配. Python 自1.5版本起增加了re 模块,它提供 Perl 风格的正则表达式模式. re ...

  4. python(进阶篇):正则表达式常用语法

    ​ ​ 活动地址:CSDN21天学习挑战赛 学习的最大理由是想摆脱平庸,早一天就多一份人生的精彩: 虽然永远无法预料明天是晴还是雨, 也无法预知你在乎的人是否还在身旁, 以及你一直以来的坚持究竟能否换 ...

  5. 【Python五篇慢慢弹】快速上手学python

    快速上手学python 作者:白宁超 2016年10月4日19:59:39 摘要:python语言俨然不算新技术,七八年前甚至更早已有很多人研习,只是没有现在流行罢了.之所以当下如此盛行,我想肯定是多 ...

  6. 【python教程入门学习】Python实现自动玩贪吃蛇程序

    这篇文章主要介绍了通过Python实现的简易的自动玩贪吃蛇游戏的小程序,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学一学 实现效果 先看看效果 这比我手动的快多了,而且是单机的,自动玩没惹 ...

  7. python中文字符串编码_浅谈python下含中文字符串正则表达式的编码问题

    前言 Python文件默认的编码格式是ascii ,无法识别汉字,因为ascii码中没有中文. 所以py文件中要写中文字符时,一般在开头加 # -*- coding: utf-8 -*- 或者 #co ...

  8. 面试题之第一部分(Python基础篇) 80题

    第一部分(python基础篇)80题 为什么学习Python?==*== # 1. python应用于很多领域,比如后端,前端,爬虫,机器学习(人工智能)等方面,几乎能涵盖各个开发语言的领域,同时它相 ...

  9. python包括哪些部分_第一部分 Python基础篇

    第⼀一部分 Python基础篇 1. 为什什么学习Python? 朋友推荐,比较简单易学,生态圈比较强大 发展趋势:人工智能.数据分析 2. 通过什什么途径学习的Python? 廖雪峰.网络博客.相关 ...

最新文章

  1. 机器学习入门(02)— 由感知机到神经网络的过渡进化,激活函数在神经网络中的作用
  2. 如何找回RAID1丢失的数据
  3. 面试:从volatile说到i++的线程安全问题
  4. 【LeetCode每周算法】两数相加
  5. LOG4J日志级别详解
  6. 物联网全称_物联网的魔力世界
  7. 前端:常用单词(专业版)
  8. VS2019C++代码出现cout不明确
  9. Docker Compose 引用环境变量
  10. 智能优化算法:猎食者优化算法-附代码
  11. 数据库连接池c3p0
  12. 搭建第一个springBoot 摘抄自蚂蚁课堂
  13. VSCode配置vue用户代码片段Snippets
  14. 怎么用计算机打对错,丶符号怎么打-Word里的对√ 和 错× 怎么打出来的?
  15. (dfs)[USACO3.4]“破锣摇滚”乐队 Raucous Rockers
  16. python爬虫-代理池的维护
  17. 看看别人是如何进行大数据测试的?
  18. 浅谈测试环境管理方式
  19. sensitivity和specificity
  20. 程序员才是真正的段子手

热门文章

  1. 简单说说disney sea
  2. 四旋翼飞行器1——结构和控制原理
  3. 高效率的蒙哥马利模乘算法的python语言实现
  4. 频率响应范围测试软件,Analog Discovery 2 测评(3) 频率响应测试利器
  5. 解决微信视频号 当前浏览器不支持此视频格式 的错误消息
  6. 实验室管理系统LIMS运用场景
  7. Linux c/c++下ls命令的实现(超详细)
  8. 输出每个月的天数 C语言PTA
  9. Adobe Photoshop CC绿色版
  10. 通信原理与MATLAB(九):DPSK的调制解调