博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
正则表达式与re模块
阅读量:7249 次
发布时间:2019-06-29

本文共 2234 字,大约阅读时间需要 7 分钟。

一,正则表达式(

正则表达式本身与python没什么关系,就是匹配字符串内容的一种规则,只和字符串相关。

定义:正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特殊字符、及这些特殊字符的组合,组合一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。

1,字符组,[字符组],在同一位置可能出现的各种字符组成一个字符组,在在正则表达式中用[]表示。

2,元字符:. , 匹配除换行符以外的任意字符

      \w,匹配字符或数字或下划线,\W,匹配非字母或下划线或数字

      \s,匹配任意空白字符,\S,匹配非空白字符

      \d,匹配数字,         \D,匹配非数字

      \n,匹配一个换行符,\t,匹配一个制表符,\b,匹配一个单词的结尾

      ^,匹配字符串的开始,$,匹配字符串的结尾,a|b,匹配字符a或字符b

      (),匹配括号内表达式,也表达一个组

      [...],匹配字符组中的字符,[^...],匹配除了字符组中字符的所有字符

3,量词

*,+,?,{n},{n,},{n,m},默认情况下,采用贪婪匹配。尽可能匹配长的字符串。

在量词后面加?,就是非贪婪匹配,尽可能匹配短的字符串。

转义符,python中,在字符串前加r,例r“\d”

  .*?的用法:.*?x,就是取前面任意长度的字符,直到一个x出现

二,re模块

re模块下的常用方法

import re# ret=re.findall("s","she is girs")   #返回所有满足匹配条件的结果,放在列表里# print(ret)# ret=re.search("s","zhe is girs").group() #函数会在字符串内查找,只找到第一个匹配,就返回一个包含信息的对象,该对象可以# print(ret)                               #通过调用group()方法得到匹配的字符串,如果没有,则返回None,调用group会报错# ret=re.match("a","zhe is girs")          #和search一样,但在字符串开始处匹配,匹配不到,就没有,报错# print(ret.group())# ret=re.split("[ab]","abdf")   #先按"a"分割得到""和"bdf",再对""和"bdf"分别按"b"分割,结果['', '', 'df']# print(ret)                     #如果不加中括号,则按"ab"分割,结果['', 'df']# ret=re.subn("\d","r","we1rer23g4")   #将数字替换成"r",返回元组(替换的结果,替换了多少次(可设置))# print(ret)# see=re.compile("\d{3}")            #将正则表达式编译成为一个正则表达式对象,规则要匹配的3个数字# ret=see.search("asd34r345rr")# print(ret.group())                    #345# ret=see.sub("\d","r","we1rer23g4",1)            #将数字替换成"r",参数1表示只替换一个# print(ret)# ret=re.finditer("\d","da3gf4h4")           #finditer返回一个存放匹配结果的迭代器# print(ret)               #
# print(next(ret).group())# print(next(ret).group())# print([i.group()for i in ret])# for i in ret:# print(i.group())

优先级

#findall的优先级# ret=re.findall("www.(biadu|oldboy).com","www.oldboy.com")# print(ret)         #['oldboy']      这是因为findall会优先把匹配结果组里内容返回,如果想要匹配结果,取消权限即可## ret=re.findall("www.(?:biadu|oldboy).com","www.oldboy.com")# print(ret)         #['www.oldboy.com']# split的优先级# ret=re.split("\d","eva4your3yuan2she")# print(ret)       #['eva', 'your', 'yuan', 'she']# ret=re.split("(\d)","eva4your3yuan2she")# print(ret)       #['eva', '4', 'your', '3', 'yuan', '2', 'she']# #在匹配部分加上()之后所切出来结果是不同的# #没有()的没有保留所匹配的项,但有()的可以保留匹配的项

 

 

 

 

 

      

转载于:https://www.cnblogs.com/glf1160/p/8252899.html

你可能感兴趣的文章
你真的懂Redis事务吗?
查看>>
收藏 | 12个ggplot2拓展程序助你强化R可视化
查看>>
1-Linux C语言编程基本原理与实践-学习笔记
查看>>
WRF-DA代码编译与安装(二)——WRF-DA模块的编译与安装
查看>>
2018年美团Android校招
查看>>
Spring消息之WebSocket
查看>>
Java 文件流操作.
查看>>
《11招玩转网络安全》之第三招:Web暴力破解-Low级别
查看>>
Eclipse快捷键大全
查看>>
Android实现TextView字符串波浪式跳动
查看>>
NumPy—random随机数生成函数总结
查看>>
第10章节-Python3.5-Django路由分发
查看>>
排序三 直接插入排序
查看>>
输入输出流体系图
查看>>
玩转报表排名
查看>>
《函数响应式领域建模》读后感
查看>>
一入前端深似海,从此红尘是路人系列第四弹之未来前端路该何去何从
查看>>
java笔记--笔试中极容易出错的表达式的陷阱
查看>>
第140天:前端开发中浏览器兼容性问题总结(一)
查看>>
socket编程的select模型
查看>>