说明:

        在python中,先是正则基本理论和字符代表意思,接着是python3中re的实操正则模块

理论:

一、元字符

二、限定符

三、字符类

四、排除字符

五、选择字符

六、转义字符

七、分组

八、小知识点

Python3正则操作

一、匹配字符串

1、使用 match()方法匹配

常用标志

2、使用 search()方法匹配

3、使用findall()方法进行匹配

4、sub()替换字符

5、使用正则表达式分割字符串


理论:

一、元字符

常用元字符及说明

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

解析: 
     匹配以字母gao开头的单词,先匹配单词开始处(\b),然后匹配字母gao,接着匹配任意数量的数字或字母(\w*(*代表任意多个字符)),最后匹配单词结束处(\b)
    该表达式 可以匹配如“gao123”、“gaoqwe”等

二、限定符

常用限定符以及对应的说明和举例

限定符  说明 举例
匹配前面的字符零次或一次 colou?r  # 该表达式可以匹配clour和color
+ 匹配前面的字符一次或多次 go+gle # 该表达式可以匹配的范围从gogle到goo....gle
* 匹配前面的字符零次或多次 go*gle # 该表达式可以匹配从go...gle
{n} 匹配前面的字符n次    go{2}gle  # 该表达式只匹配google
{n,} 匹配前面的字符最少n次 go{2,}gle # 该表达式可以匹配goo...gle或google
{n,m} 匹配前面的字符最少n次,最多m次 employe{0,2} # 该表达式可以匹配 employ 、employe、employee 

三、字符类

如果要匹配没有预定义元字符的集合(如元音字母 a、e、i、o),那么只需要在括号里列出它们即可,例如[aeio]匹配任何一个英文元音字母,而 [.?!] 表示匹配标点符号“.” “?” “!”,也可以指定范围例如[0-9]代表的含义与\d一致

四、排除字符

正则表达式中"^" 表示行的开始,但是加入到方括号中就是排除的意思

# 例如
[^a-zA-Z]
#匹配字母开头,不区大小写字母

五、选择字符

例如 匹配身份证号码  (身份证号码规则: 身份证号码长度为18位,前17位为数字后一位是校验位,该校验位可能为 X或x, 这里可以用 “|”(或) 来实现

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

上述表达式为: 可以匹配身份证的 18位号码 或 17位号码和最后一位字母为大小写X

六、转义字符

正则表达式中转义字符为“\” 反斜杠 ,符号溢出不识别可以加“\” 转义

# 例如
#匹配ip地址的写法
[1-9]{1,3}\.[0-9]{1.3}.........等

七、分组

小括号 分组 也叫 子表达式

# 举例
(thir|four)th

上述表示 匹配单词 thirth 或 fourth 

、小知识点

python之执行过程中出现出现特殊字符需要通过 “\” 来转义一下 让python识别到,所以正则表达式中需要用这种方法书写: \\d\\d    也可以通过在前面加上 r 来防止字符溢出,例如 r'\d\d'

Python3正则操作

使用re模块来实现表达式的操作

简介:

re模块用于实现正则表达式的操作,在实现是可以使用re模块提供的方法(如 search  match  findall等)进行字符串处理,可以使用compile方法将模式字符串转换为正则表达式对象,再使用该表达式相关方法操作

一、匹配字符串

         匹配字符串 用re模块下的 match、search、findall等方法

1、使用 match()方法匹配

        match方法用于字符串开始处进行匹配,如果在起始位置匹配成功,返回Match对象,否则返回None

语法格式:

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

 # 参数说明

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

        string:表示要匹配的字符串

        flags:可选参数,表示标志位,用于控制匹配方式,如 是否区分字母大小写(参数请查看上述的“常用标志”一栏)

常用标志

标志 说明
A或ASCII 对于\w,\W,\b,\B,\d,\D,\s,\S只进行ASCII匹配(使用3.x)
I或IGNORECASE 执行不区分字母大小写匹配
M或MULTILINE 将^和$用于包括整个字符串的开始和结尾的每一行(默认情况下,仅适合用于字符串的开始和结尾处)
S或DOTALL 使用“.”字符匹配所有字符,包括换行符
X或VERBOSE  忽略模式字符串中未转义的空格和注释

#举例:   可以将字符串中匹配的结果拿出来

import re# 匹配例子
pattern = r'This_\w+'  # 模式字符串  \w : 匹配字母或数字或下划线或汉字  "+" 代表 匹配前面的字符一次或多次
string = 'This_is_my_dog THIS_IS_MY_DOG'  # 要匹配的字符
match = re.match(pattern, string, re.I)  # 匹配字符串不区分大小写 注意 I 大写
print(f"直接输出结果:{match}")  # 输出
print(f'匹配值的起始位置:{match.start()}')
print(f'匹配结束位置:{match.end()}')
print(f'匹配位置的元组:{match.span()}')
print(f'要匹配的字符串:{match.string}')
print(f'匹配的数据:{match.group()}')# 不匹配例子 不到的结果返回为None
strings = 'haha THIS_IS_MY_DOG'
matchs = re.match(pattern, strings, re.I)  # 与上面同理
print(f"不匹配的结果:{matchs}")

运行结果:

# 解析:

        re.match方法从字符串开始位置匹配,当第一个字母不符合条件时,不在匹配,直接返回None

        当re.natch方法匹配到后悔显示匹配字符的下标位置以及匹配内容,注意 这里只能返回第一个匹配到的值,第二个不会返回

2、使用 search()方法匹配

# 注意 :

         re.search 可以匹配字符串中任意一个地方的关键词  与 match的区别在于 match值匹配开头的第一个,而search可以匹配任意位置

        search 如果找不到对比相符的字符串会传回None的值,如果找到会传回对应的值

格式:

re.search(pattern,string,[flages])

参数说明:

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

        string:表示要匹配的字符串

        flags:可选参数,表示标志位,用于控制匹配方式,如 是否区分字母大小写(参数请查看上述的“常用标志”一栏)

# 举例

import restring = r'(黑客)|(抓包)|(偷)|(盗)|(监听)'  # 模式字符串 匹配其中内容 “|”代表或strings = "我想学习关于黑客方面的知识,并查阅黑客的书籍!"match = re.search(string, strings)  # re.search 可以匹配字符串中任意一个地方的关键词
print(match)
if match == None:print(f"{strings} #安全!")
else:print(f"{strings} #有危险词汇!")

# 运行结果:

多个分组的通道搜索

        如果想要搜索字符串对比内容中的任意一个字符串组合,可以使用以下表达式的格式

pattern = 'test(one|two|three)'

案例:


import restrings = "testonetwothree"
pattern = r'test(one|two|three)'
txt = re.search(pattern, strings)
print(txt.group())
print(txt.group(1)) # 只能匹配其中一个结果 多个也只能匹配一个  匹配最后一个

# 运行结果

使用groups()函数配合search 函数

使用search函数提取字符的时候,可以使用 groups 这个方法取得分组内容

例如:

import re
# 将a中的数字匹配出来 并利用 groups 进行分组提取a = "This is my phone 123-456789"
pattern = r"(\d{3})-(\d{6})"
b = re.search(pattern, a)
print(b)
d, c = b.groups()
print(d)
print(c)

# 运行结果

3、使用findall()方法进行匹配

 findall()方法用于在整个字符串中搜索所有符合正则表达式的字符串,并以列表的形式返回。如果匹配成功,则返回匹配结构的列表,否则返回空列表

格式:

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

参数说明:

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

        string:表示要匹配的字符串

        flags:可选参数,表示标志位,用于控制匹配方式,如 是否区分字母大小写(参数请查看上述的“常用标志”一栏

import re# 匹配例子
pattern = r'This_\w+'  # 模式字符串  \w : 匹配字母或数字或下划线或汉字  "+" 代表 匹配前面的字符一次或多次
string = 'This_is_my_dog THIS_IS_MY_DOG'  # 要匹配的字符
match = re.findall(pattern, string, re.I)  # 匹配字符串不区分大小写 注意 I 大写
print(match)

# 运行结果:

4、sub()替换字符

sub 方法用于实现字符串的替换

格式:

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

# 参数说明

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

        repl: 表示替换得字符串。

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

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

        flags:可选参数,表示标志位,用于控制匹配方式,如是否区分字母大小写(参数请查看上述的“常用标志”一栏

举例:

import restring = r'(黑客)|(抓包)|(偷)|(盗)|(监听)'  # 模式字符串 匹配其中内容 “|”代表或strings = "我想学习关于黑客方面的知识,并查阅黑客的书籍!"match = re.sub(string,'(违规言语!)', strings)  # re.search 可以匹配字符串中任意一个地方的关键词
print(match)

  运行结果:

     

5、使用正则表达式分割字符串

   spli 方法用于实现根据正则表达式切割字符,并以列表的形式返回。

格式:

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

参数说明

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

        string: 表示要匹配的字符

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

        可选参数,表示标志位,用于控制匹配方式,如是否区分字母大小写(参数请查看上述的“常用标志”一栏

举例:

        截出一个正确的网址

import repattern = r'[?]'  # 定义分隔符
url = "https://www.bdqn.vip/?cat=7"
result = re.split(pattern, url)  # 分割字符串
print(result)

运行结果:

Python3正则表达式(慢慢更新中~)相关推荐

  1. 学习Python过程中的一些记录,慢慢更新中,希望能坚持下去~

    文件读取错误 Image data cannot be converted to float 这个出现的的原因一般是没有读取到所需图片,一般是路径问题,也有可能是图片不合规范,这时候将图片或者文件放到 ...

  2. Drawio使用简介(慢慢更新中)

    drawio是一款强大.免费的绘图工具(基本可以替代收费的visio等),使用起来非常方便.支持网页版使用(网页版可以自己部署一套)以及客户端使用(支持windows,MacOS以及Linux). 该 ...

  3. R语言正则表达式语法共享(更新中)

    R语言正则表达式语法 在之前文章stringr包里面提到需要用到正则表达式的去处理一些杂乱数据,尤其是在处理从网络爬取的数据,而非自由平台的数据时候,数据是非常脏的. R语言可运用正则表达式的函数 1 ...

  4. python网络爬虫系列教程_Python网络爬虫系列教程连载 ----长期更新中,敬请关注!...

    感谢大家长期对Python爱好者社区的支持,后期Python爱好者社区推出Python网络爬虫系列教程.欢迎大家关注.以下系列教程大纲,欢迎大家补充.视频长期连载更新中 --------------- ...

  5. 火狐扩展(Firefox Extension)FillForm开发手记(更新中)

    FillForm是Firefox的一个扩展,根据名字可以看出来是填写表单,但是实际基本所有的表单元素都会处理的,这个扩展的功能就是可以保存和填写当前网页所有文本框.复选框.单选框的内容(input.t ...

  6. 秒杀系统(详解)基于SpringBoot实现(持续更新中)

    秒杀系统 全部代码(更新中) 1.什么是秒杀 2.秒杀的问题 2.1.超卖 2.2.高并发 2.3.恶意请求 2.4.高性能 3.解决方法 4.项目落地实现 4.1.数据库准备 4.2.项目创建 5. ...

  7. 嵌入式相关开源项目、库、资料------持续更新中

    学习初期最难找的就是找学习资料了,本贴精心汇总了一些嵌入式相关资源,包括但不限于编程语言.单片机.开源项目.物联网.操作系统.Linux.计算机等资源,并且在不断地更新中,致力于打造全网最全的嵌入式资 ...

  8. 转:从ubuntu中文论坛转载的一片超好的文章,慢慢学习中(转)

    从ubuntu中文论坛转载的一片超好的文章,慢慢学习中(转) Posted on 2011-01-07 02:05 leekiang 阅读(866) 评论(0) 编辑 收藏 所属分类: LINUX,U ...

  9. VUE 笔记(持续更新中...)

    最近刚好我也在学习vue,这些是我的一些笔记,记录下来,方便用的时候查看,欢迎大家批评指正! 1. 简介 Vue.js是JavaScript MVVM(Model-View-ViewModel)框架 ...

最新文章

  1. Android优化五:布局优化
  2. 服务器安装centos5.5下安装samba服务器以及windows访问samba服务器
  3. oracle linux vs centos我们选择谁
  4. matlab simulink 四分之一1/4车辆垂向振动模型 轮毂电机
  5. C语言实训指导数组,c语言实训指导书
  6. ARM 之十一__weak 和 __attribute__((weak)) 关键字的使用
  7. 山石网科SG-6000-E5560配置SSL ***实例
  8. php调整表格样式,表格的创建以及样式修改
  9. 预览ExtJS 4.0的新功能(四):焕然一新的Store/Proxy
  10. python URLError,HTTPError 的异常处理
  11. FreeRTOS的HOOK,以及(23)FreeRTOS 空闲任务分析
  12. 计算机电子线路制图是学啥的,电气制图与电子线路CAD课程教学大纲.doc
  13. 20220518 十堂课教会管理者打胜仗———管理者如何快速上手,带领团队打胜仗?
  14. 电容(3)——晶振电路的电容选择
  15. 本机电脑清除DNS缓存+浏览器清除DNS缓存
  16. 360 mysql读写分离_mysql-proxy之奇虎360 Atlas 安装实现mysql读写分离
  17. 编程金融小白学 股票期权 lv.6 希腊字母 Gamma
  18. DO、DTO和VO分别是什么?
  19. DICOM医学图像处理:BMP转DCM、DCM转BMP、多张BMP转DCM、JPG转DCM,,多张JPG转DCM。
  20. html网页打不开二级网页,教你二级网页打不开怎么解决

热门文章

  1. BeatBox终极版——Head first java 650
  2. 人在弥留之际的五大憾事
  3. CKA考试题梳理---加油,骚年 记得点赞收藏
  4. 本关任务:编写一个Point类,有x、y两个属性。编写一个PointDemo类,并提供一个distance(Point p1,Point p2)方法用于计算两点之间的距离,实例化两个具体的Point对
  5. glut linux 安装包,“包GLUT不存在”,即使安装在Arch Linux的CL-的OpenGL
  6. Bit Vector算法
  7. 给图片加水印--手把手教新码农如何把技术变成产品
  8. PHP实现生成推广海报的方法详解
  9. cad怎么画坐标系箭头_怎样用CAD画一个路标箭头?,来学习吧
  10. 怎么用计算机算三角函数值,如何在手机计算器中由三角函数值求角度