python之re模块(正则表达式)
正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配。
re 模块使 Python 语言拥有全部的正则表达式功能。
正则表达式中,普通字符匹配本身,非打印字符\n 、\t等,还有些特殊字符
特殊元字符
. 默认情况下,他匹配除换行符之外的任何字符,当有标志re.S 被指定时可以匹配任何字符。
^ 从字符串开头匹配
$ 匹配字符串的结尾或紧跟在字符串末尾的换行符之前
* 匹配0次,1次或者多次前面的字符。
?匹配0次或者1次前面的字符。
+ 匹配1次或者多次前面的字符、
{n} 前面的字符出现n次。
{n,m} 前面的字符至少出现n次,至多出现m次
| 模式选择符 如 A|B A和B可以是任意RE,创建一个匹配A或B的正则表达式 。'|'
操作从不贪婪,一旦A匹配,B将不会被进一步测试
() 模式单元符
\ 用来逃避特殊字符(允许匹配像'*'
,'?'
等等字符 ),使用方法 \* \?
[] 原子表,用来指定一组字符,[abk]表示匹配‘a’,‘b’或‘k’,[a-z] 匹配任意一个小写字母,[A-Z]匹配任意一个大写,[0-9]任意一个数字
特殊字符在原子表失去特殊意义,如[.+?*()]匹配其中任意一个字符
[^.?*({] 原子表内以^开头表示不匹配在表中的字符
通用字符
\w 匹配热一个字母、数字或者下划线字符
\W 匹配除了字母、数字或者下划线的一个其他字符
\d 匹配一个10进制数
\D 匹配任何不是十进制数字的字符。
\s 匹配空白字符 相当于 [ \t\n\r\f\v]
\S 匹配任何不是空白字符的字符 相当于[^ \t\n\r\f\v]
\Z 匹配字符串末尾
.* 贪婪匹配模式 ,匹配尽可能多的
.*?非贪婪匹配模式,只匹配的第一个满足的就行
正则表达式常见函数
re.compile(pattern,flags = 0) 对正则表达式进行预编译,用在多次需要调用的场合,相当于一个模板放在那里,想用就用。
flags可以为以下几种
re.A(
仅匹配ASCII码), re.I
(匹配时忽略大小写),re.L
(区域依赖), re.M
(多行匹配),re.S
(让.匹配任意字符), re.U
(Unicode匹配)和re.X
(详细)表达
prog = re.compile(pattern)
result = prog.match(string)
#另一种写法
result = re.match(pattern, string)
re.match(pattern,string,flags = 0 )从字符串开头处进行匹配
>>> m = re.match(r"(\w+) (\w+)", "Isaac Newton, physicist") #原始字符串符号(r"text"
)使正则表达式保持原始格式,无特殊用法
>>> m.group(0) # The entire match
'Isaac Newton'
>>> m.group(1) # The first parenthesized subgroup.
'Isaac'
>>> m.group(2) # The second parenthesized subgroup.
'Newton'
>>> m.group(1, 2) # Multiple arguments give us a tuple.
('Isaac', 'Newton')
>>> m = re.match(r"(?P<first_name>\w+) (?P<last_name>\w+)", "Malcolm Reynolds")
>>> m.group('first_name') #正则表达式使用(?P<name>...)
语法,则groupN 参数也可以是通过其组名称标识组的字符串
'Malcolm'
>>> m.group('last_name')
'Reynolds'
>>> m = re.match(r"(\d+)\.(\d+)", "24.1632")
>>> m.groups() #返回一个包含匹配所有子组的元组
('', '')
re.search(pattern,string,flags = 0 )字符串整体匹配,返回第一个匹配成功的 ,match函数中的用法同样适用
#match.
start
([ 组] )match.
end
([ 组] )
>>> email = "tony@tiremove_thisger.net"
>>> m = re.search("remove_this", email)
>>> email[:m.start()] + email[m.end():] #返回按组匹配的子串的开始和结束索引
'tony@tiger.net'
re.findall(pattern,string,flags = 0 )匹配符合模式的多个,返回列表类型的结果
>>> text = "He was carefully disguised but captured quickly by police."
>>> re.findall(r"\w+ly", text)
['carefully', 'quickly']
re.sub(pattern,rep,string , max )根据正则表达式来实现替换某些字符串,rep代表替换的内容,max,表示最多替换次数,不写就全部替换。
>>> def dashrepl(matchobj):
... if matchobj.group(0) == '-': return ' '
... else: return '-'
>>> re.sub('-{1,2}', dashrepl, 'pro----gram-files')
'pro--gram files'
>>> re.sub(r'\sAND\s', ' & ', 'Baked Beans And Spam', flags=re.I)
'Baked Beans & Spam'
re.split(pattern,string,maxsplit = 0,flags = 0 )根据模式拆分字符串
>>> re.split(r'\W+', 'Words, words, words.')
['Words', 'words', 'words', '']
>>> re.split(r'(\W+)', 'Words, words, words.')
['Words', ', ', 'words', ', ', 'words', '.', '']
>>> re.split(r'\W+', 'Words, words, words.', 1)
['Words', 'words, words.']
>>> re.split('[a-f]+', '0a3B9', flags=re.I)
['', '', '']
具体的案例稍后补充.........
python之re模块(正则表达式)的更多相关文章
- 【Python开发】Python之re模块 —— 正则表达式操作
Python之re模块 -- 正则表达式操作 这个模块提供了与 Perl 相似l的正则表达式匹配操作.Unicode字符串也同样适用. 正则表达式使用反斜杠" \ "来代表特殊形式 ...
- Python之re模块 —— 正则表达式操作
这个模块提供了与 Perl 相似l的正则表达式匹配操作.Unicode字符串也同样适用. 正则表达式使用反斜杠" \ "来代表特殊形式或用作转义字符,这里跟Python的语法冲突, ...
- Python之re模块正则表达式
re模块用于对python的正则表达式的操作 字符: .匹配除换行符以外的任意字符 \w匹配字母或数字或下划线或汉字 \s匹配任意空白符 \b匹配单词的开始或结束 ^匹配字符串的开始 $匹配字符串的结 ...
- Python 之Re模块(正则表达式)
一.简介 正则表达式本身是一种小型的.高度专业化的编程语言,而在python中,通过内嵌集成re模块,程序媛们可以直接调用来实现正则匹配. 二.正则表达式中常用的字符含义 1.普通字符和11个元字符: ...
- 第11.18节 Python 中re模块的匹配对象
匹配对象是Python中re模块正则表达式匹配处理的返回结果,用于存放匹配的情况.老猿认为匹配对象更多的应该是与组匹配模式的功能对应的,只是没有使用组匹配模式的正则表达式整体作为组0. 为了说明下面的 ...
- Python的regex模块——更强大的正则表达式引擎
Python自带了正则表达式引擎(内置的re模块),但是不支持一些高级特性,比如下面这几个: 固化分组 Atomic grouping 占有优先量词 Possessive quantifi ...
- Python中的re模块--正则表达式
Python中的re模块--正则表达式 使用match从字符串开头匹配 以匹配国内手机号为例,通常手机号为11位,以1开头.大概是这样13509094747,(这个号码是我随便写的,请不要拨打),我们 ...
- day18 python之re模块与正则表达式
正则表达式 正则表达式,就是匹配字符串内容的一种规则. 官方定义:正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符.及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串 ...
- 正则表达式与Python中re模块的使用
正则表达式与Python中re模块的使用 最近做了点爬虫,正则表达式使用的非常多,用Python做的话会用到re模块. 本文总结一下正则表达式与re模块的基础与使用. 另外,给大家介绍一个在线测试正则 ...
- python全栈开发之正则表达式和python的re模块
正则表达式和python的re模块 python全栈开发,正则表达式,re模块 一 正则表达式 正则表达式(Regular Expression)是一种文本模式,包括普通字符(例如,a 到 z 之间的 ...
随机推荐
- Java实现 LeetCode 147 对链表进行插入排序
147. 对链表进行插入排序 对链表进行插入排序. 插入排序的动画演示如上.从第一个元素开始,该链表可以被认为已经部分排序(用黑色表示). 每次迭代时,从输入数据中移除一个元素(用红色表示),并原地将 ...
- java实现第39级台阶(三十九级台阶)
标题: 第39级台阶 小明刚刚看完电影<第39级台阶>,离开电影院的时候,他数了数礼堂前的台阶数,恰好是39级! 站在台阶前,他突然又想着一个问题: 如果我每一步只能迈上1个或2个台阶.先 ...
- Mysql(Mariadb)数据库主从
Mysql主从复制的实现原理图大致如下: MySQL之间数据复制的基础是以二进制日志文件(binary log file)来实现的,一台MySQL数据库一旦启用二进制日志后,其作为master,它数据 ...
- Istio的运维-诊断工具(istio 系列五)
Istio的运维-诊断工具 在参考官方文档的时候发现环境偶尔会出现问题,因此插入一章与调试有关的内容,便于简单问题的定位.涵盖官方文档的诊断工具章节 目录 Istio的运维-诊断工具 使用istioc ...
- eurekaAutoServiceRegistration 异常
方案来自:https://github.com/spring-cloud/spring-cloud-netflix/issues/1952 解决办法: @Component public class ...
- JPA 中 find() 和 getReference() 的区别
在查询的时候有两个方法:find()和getReference(),这两个方法的参数以及调用方式都相同.那么这两个方法有什么不一样的呢? find()称为 立即加载,顾名思义就是在调用的时候立即执行查 ...
- [ARC060D] 最良表現
题目 点这里看题目. 分析 由于 KMP 的失配数组有着天然的找循环节的功能,因此我们不难想到对原串进行两次 KMP ,一正一反. 可以发现如下的规律: 1. 原串无循环节,这个时候 ...
- MQ系列(1)——rabbitMQ简介
前文我们学习了 MQ的相关知识,现在我们来学习一下实现了AMQP协议的 rabbitMQ 中间件.rabbitMQ 是使用 erlang 语言编写的中间件(erlang之父 19年4月去世的,很伟大一 ...
- Zookeeper——Watcher原理详解
文章目录 引言 正文 一.如何注册监听 二.如何触发监听事件 三.事件类型有哪些 四.Watcher可以被无限次触发么?为什么要这么设计? 五.Watcher实现原理 1. 客服端发送请求 a. 初始 ...
- Happens-Before原则
Java内存模型是通过各种操作来定义的,包括对变量的读/写操作,监视器的加锁和释放操作,以及线程的启动和合并操作.JMM为程序中所有的操作定义了一个偏序关系,称之为Happens-Before.要想保 ...