Python 正则表达式
最近研究Python爬虫,很多地方用到了正则表达式,但是没好好研究,每次都得现查文档。今天就专门看看Python正则表达式。本文参考了官方文档 re模块。
模式
首先正则表达式的语法我就不说了,这玩意倒是不算难,用的时候现查就行了——正则表达式_百度百科。
在很多编程语言中,由于有转义字符这么一种东西的存在,导致正则表达式需要使用两个斜杠来处理。如果编程语言支持原始字符串,那么就不需要两个斜杠了。在Python中,字符串前面添加字母r即可把字符串变成原始字符串。
下面是一个正则表达式最简单的使用例子。我们查找所有以字母F开头的单词,不论大小写。这个例子使用了正则表达式模块的re.findall
函数,它会返回所有符合模式的列表。
import retext = 'fuck shit it make she forest'results = re.findall(r'\b[Ff]\w+', text)
print(results)
如果某一个模式需要经常使用,我们可以把它编译为模式对象。然后从模式对象上调用各种正则查询方法。这样做的优点是:由于模式已经编译了,所以后续的查询速度会更快。
pattern = re.compile(r'\b[Ff]\w+')
print(pattern.findall(text))
查询标志
大部分查询方法还可以接受一个查询标志参数。查询标志让正则表达式具有不同的行为。下面一一说明。
标志 | 作用 |
---|---|
re.A、re.ASCII | 以ASCII模式查询,默认是Unicode模式 |
re.DEBUG | 显示编译表达式的调试信息 |
re.I、re.IGNORECASE | 忽略字母的大小写 |
re.L、re.LOCALE | 以区域敏感方式查询匹配 |
re.M、re.MULTILINE |
开启多行模式,开启之后行边界符^$ 会匹配每行的开始和结束,而不是整个字符串的开始和结束
|
re.S、re.DOTALL | 使用此标志,会让点符号匹配所有字符,默认情况下点符号会匹配换行符以外的符号 |
re.X、re.VERBOSE | 开启啰嗦模式,可以在写正则表达式的时候添加注释 |
下面是啰嗦模式的例子,来自Python官方文档。
a = re.compile(r"""\d + # the integral part\. # the decimal point\d * # some fractional digits""", re.X)
b = re.compile(r"\d+\.\d*")
查询方法
查询方法有两种形式,第一种是re模块的函数,这些函数需要接受一个模式字符串。第二种就是从编译好的模式对象上调用,这样不需要模式字符串了。基本上大部分方法都有这两种形式,所以这里只需要介绍一种形式。
re.search(pattern, string, flags=0)
方法查询字符串,返回第一个结果的匹配对象。不管有多少个满足条件的字符串,这个方法之返回第一个。如果查询不到,就返回None。re.match(pattern, string, flags=0)
查询字符串,当字符串的前面一部分和模式匹配的时候,会返回相应的匹配对象。如果不匹配,那么返回None。需要注意即使开启了多行模式,这个方法也只查询字符串最前面的一部分,不会查询每行的前面。re.fullmatch(pattern, string, flags=0)
,如果整个字符串和模式匹配,返回相应的匹配对象。否则返回None。re.split(pattern, string, maxsplit=0, flags=0)
,按给定正则表达式分割字符串。re.findall(pattern, string, flags=0)
,最常用的方法,返回一个列表,包含所有匹配模式的字符串。re.finditer(pattern, string, flags=0)
,和findall方法类似,不过返回的是一个迭代器。re.sub(pattern, repl, string, count=0, flags=0)
,将字符串中匹配模式的部分使用repl替换,返回替换后的字符串。re.subn(pattern, repl, string, count=0, flags=0)
,和sub方法类似,不过返回元组(新字符串,替换的数量)
。re.purge()
,清除正则表达式缓存。
在已编译好的正则表达式对象上还有以下几个属性。
flags,正则表达式的所有标志,包括flags参数设置的,compile方法编译传入的,以及正则表达式中本身的标志。
groups,正则表达式中捕获组的数量。
pattern,返回模式字符串。
groupindex,返回
(?P<id>)
形式的命名组和组编号键值对组成的字典。
匹配对象
上面提到的很多方法都返回匹配对象。匹配对象包含了一些方法和属性,方便我们进行查询。
最常用的就是group函数,它会返回指定组对应的字符串。下面的例子就查询了给定数据中的数据量和每页的条数。第0组返回整个匹配,第1组返回第一个匹配,以此类推……也可以采用命名组的方式。
text = '总共20条数据 每页5条'
pattern = re.compile(r'总共(?P<total>\d+)条数据\s+每页(?P<per>\d+)条')match = pattern.match(text)
print(match.group(0))
另一个比较常用的函数就是groups(default=None)
,它返回所有组组成的元组。如果有的组没有匹配到字符串,就会显示为None,这时候可以使用default参数指定默认值。
text = '总共20条数据 每页5条'
pattern = re.compile(r'总共(?P<total>\d+)条数据\s+每页(?P<per>\d+)条')match = pattern.match(text)print(match.groups())# 结果
# ('20', '5')
groupdict(default=None)
返回组名和字符串组成的字典。还是上面的例子。
print(match.groupdict())
# {'total': '20', 'per': '5'}
start
和end
函数返回给定组的在字符串的起始和结束索引,如果对应的组没有任何匹配,则返回-1。下面的例子来自Python官方文档,从电子邮件地址中去除remove_this。
>>> email = "tony@tiremove_thisger.net"
>>> m = re.search("remove_this", email)
>>> email[:m.start()] + email[m.end():]
'tony@tiger.net'
match.span([group])
返回给定组的起始索引和结束索引组成的元组。
以上就是Python正则表达式的大部分内容了,灵活使用这些知识,可以获得强大的功能。关于如何巧用,就看大家的智慧了。
Python 正则表达式相关推荐
- 编程软件python下载怎么读-使用最方便的计算机编程软件,Python下载使用完美教程...
Python是一种通用的计算机编程软件,Python对程序员来说是一个非常有用的工具,它允许你快速地编写代码,并且我们使用软件做出的代码运行速度异常快,Python还具有别的软件不具有的突出点那么就是 ...
- python软件下载教程-使用最方便的计算机编程软件,Python下载使用完美教程
Python是一种通用的计算机编程软件,Python对程序员来说是一个非常有用的工具,它允许你快速地编写代码,并且我们使用软件做出的代码运行速度异常快,Python还具有别的软件不具有的突出点那么就是 ...
- python没基础能自学吗-没学过编程可以自学python吗
目前在很多行业中都在越来越多的应用Python,这也是很多行业学习Python的原因. 我认为是可以的,python语法简单明了,代码可读性高,容易入门.Python的哲学是「做一件事情应该只有一种最 ...
- python是什么和c++是什么区别_编程c++和python的区别
展开全部 论坛 活动 招聘 专题 打开2113CSDN APP Copyright © 1999-2020, CSDN.NET, All Rights Reserved 登录 一颗日成 关注 浅谈52 ...
- python可以从大到小循环嘛_无需编程基础,Python从入门到进阶大法
原标题:无需编程基础,Python从入门到进阶大法
- 《python透明人士,他是凭什么成为主流编程的宠儿?!》Python基础简介及入门配置
工作将近两年了,做过B/S结构的项目,也做过android,也做过C/S结构的项目,相信无论是那种项目都是基于Java.学习运用Java也已经好多年了,虽然也接触过C/C++,C#,.NET之类的开发 ...
- 《python透明人士,他是凭什么成为主流编程的宠儿?!》Python 逻辑
条件语句 if 条件语句: if (num >= 0 and num <= 5) or (num >= 10 and num <= 15): elif 条件语句: for nu ...
- 《python透明人士,他是凭什么成为主流编程的宠儿?!》Python 正则表达式
字符 . 表示任意除了\n的字符(一个) \ 转义字符(同各种语言) [-] 字符集 表示在字符集中的一个 ,可以,如[abc]表示不在abc中,如果需要使用特殊符号需要转义.所以想学的同学,有必要听 ...
- 《python透明人士,他是凭什么成为主流编程的宠儿?!》python基础语法
Python (英国发音:/ˈpaɪθən/ 美国发音:/ˈpaɪθɑːn/), 是一种面向对象的解释型计算机程序设计语言,由荷兰人Guido van Rossum于1989年发明,第一个公开发行版发 ...
- 《python透明人士,他是凭什么成为主流编程的宠儿?!》Python基础
1. 写出变量命名时的规则 1 变量名的长度不定,但是其中的字符必须是字母.数字.或者下划线(_),不能使 用空格.标点符等其他字符. 2 变量名的第一个字符不能是数字,必须是字母或下划线. 3 不能 ...
最新文章
- JavaScript 日期联动选择器
- YUM部署高版本LNMP环境
- 计算机应用基础专业自我鉴定范文毕业生,中专生计算机专业自我鉴定(7页)-原创力文档...
- Sql语句之select 5种查询
- phpcmsV9正常安装后,后台管理员不存在? phpmyadmin无法打开?
- 案例 员工信息维护系统 c# 1613925570
- 基于JAVA+SpringMVC+Mybatis+MYSQL的电影购票系统
- 【Java】关于Java编程软件idea快捷键的使用
- Rails UVA - 514(栈)
- 使用winpcap定制TCP包发送
- xp系统qq安装不上网络连接服务器,xp系统安装QQ提示“安装文件失败”如何解决...
- 银联无卡涉及关键词整理
- SLAM系统原理推导
- 可以嵌入ppt的课堂点名器_利用Python实现课堂点名器!辅导员大大的夸赞了我!...
- lzg_ad:XPE开发工具使用说明
- 1.1.3 NetBIOS编程基础(1)
- 【数据结构—图】拓扑Topo排序
- Mysql出现问题:ERROR 2058: Plugin caching_sha2_passward could not be loaded解决方案
- 使用html和css制作简单的网页
- 浪潮之巅第十三章 — 高科技公司的摇篮:斯坦福大学