python模块学习之re
正则表达式本质就是表示某种规则的一串字符。
匹配的规则叫做模式(pattern),模式作用于对象。
模式和对象可以是Unicode或者字节,但是,不能够混用,比如:模式为Unicode,对象为字节,像这样就是错误的!
当有替换需求时,替换字符串的类型也要注意和模式、对象的类型保持一致。(要么都是Unicode,要么都是字节)
下面来谈谈反斜杠(\),我们知道\+字符,可能表示一种特殊的含义,当然也可能表示\和字符2个普通字符。
比如:\d表示数字,\k表示\和k这2个普通字符。
在python中字符串分为2种:
原始字符串(raw string)和字符串
之所以搞个原始字符串,就是来应对转义字符这个大麻烦!
比如:我想表示\和b,如果我用惯性思维写成'\b',那么就傻逼了!因为\将b设置为有特殊含义的字符。
这时必须写成'\\b',但是这种写法太low了!于是搞个原始字符串的东西,前面的可以设置成r'\b'。
虽然加了个r但是相比'\\b'的写法,友好了不少!
所以:'\\\\'和r'\\'是等效的,表示普通字符\。
总结:如果字符中没有\,原始字符串就和字符串一样。
>>> re.findall('a','abkk')
['a']
>>> re.findall(r'a','abkk')
['a']
在正则表达式后面加个?,表示非贪婪匹配(最短匹配)。
re模块中常用的方法:
1、compile()
编译正则表达式的模式为对象模式,这样可以提高执行效率。
语法:
re.compile(r'pattern',[flags])
其中r的含义是不转义字符串,也就是说\t就是\和t。
例如:
import re
hello = "hello,i am tom,nice to konw u."
a = re.compile(r'to')
b = a.findall(hello) ['to','to']
2、match()
匹配的字符串必须按照pattern开头,否则匹配不到。
语法:
re.match(pattern,string,[flags])
例如:
>>> a = "hello"
>>> b = re.match(r'l',a)
>>> b
>>> c = re.match(r'he',a)
>>> c
<_sre.SRE_Match object; span=(0, 2), match='he'>
3、search()
匹配到第一个pattern就返回结果。
语法:
re.search(pattern,string,[flags])
例如:
>>> a = "hellohe"
>>> c = re.search(r'he',a).group()
>>> c
'he'
注:group()方法用来返回一个字符串,因为search()方法返回的是一个match对象。
如果正则中的pattern包含引号,那么需要注意使用\
>>> a = re.search(r'__version__ = [\'"]([^\'"]+)[\'"]',"__version__ = '3.7.0'").group(1)
>>> a
'3.7.0'
单引号中再次使用单引号,必然会造成错误,这个时候,需要在单引号前面加个转义字符(\)。
4、findall()
匹配所有的pattern并返回一个列表。
语法:
re.findall(pattern,string,[flags])
例如:
>>> a = "hello12kk32"
>>> b = re.findall(r'\d+',a)
>>> b
['12', '32']


5、sub()
匹配并替换。
语法:
re.sub(pattern,repl,string,count)
例子:
import re
text = "JGood is a handsome boy, he is cool, clever, and so on..."
print(re.sub(r'\s+', '-', text))
执行结果如下:
JGood-is-a-handsome-boy,-he-is-cool,-clever,-and-so-on... 其中第二个参数是替换后的字符串;本例中为'-' 第四个参数指替换个数。默认为0,表示每个匹配项都替换。
6.re.escape(pattern)
脱离除ascii英文、数字、下划线之外的字符串。
在处理正则时非常有效。
>>> re.escape('www.baidu.com')
'www\\.baidu\\.com'
python模块学习之re的更多相关文章
- 【转】Python模块学习 - fnmatch & glob
[转]Python模块学习 - fnmatch & glob 介绍 fnmatch 和 glob 模块都是用来做字符串匹配文件名的标准库. fnmatch模块 大部分情况下使用字符串匹配查找特 ...
- 【目录】Python模块学习系列
目录:Python模块学习笔记 1.Python模块学习 - Paramiko - 主机管理 2.Python模块学习 - Fileinput - 读取文件 3.Python模块学习 - Confi ...
- Python模块学习filecmp文件比较
Python模块学习filecmp文件比较 filecmp模块用于比较文件及文件夹的内容,它是一个轻量级的工具,使用非常简单.python标准库还提供了difflib模块用于比较文件的内容.关于dif ...
- python模块学习第 0000 题
将你的 QQ 头像(或者微博头像)右上角加上红色的数字,类似于微信未读信息数量那种提示效果. 类似于图中效果: 好可爱>%<! 题目来源:https://github.com/Yixiao ...
- Python模块学习:logging 日志记录
原文出处: DarkBull 许多应用程序中都会有日志模块,用于记录系统在运行过程中的一些关键信息,以便于对系统的运行状况进行跟踪.在.NET平台中,有非常著名的第三方开源日志组件log4net ...
- 解惑Python模块学习,该如何着手操作...
Python模块 晚上和朋友聊天,说到公司要求精兵计划,全员都要有编程能力.然后C.Java.Python-对于零基础入门的,当然是选择Python的人较多了.可朋友说他只是看了简单的语法,可pyth ...
- Python模块学习
6. Modules If you quit from the Python interpreter and enter it again, the definitions you have made ...
- Python模块学习系列
python模块-time python模块-datetime python模块-OS模块详解
- Python模块学习遇到的问题
Python使用import导入模块时报ValueError: source code string cannot contain null bytes的解决方案 Python使用import导入模块 ...
- Python 模块学习:re模块
今天学习了Python中有关正则表达式的知识.关于正则表达式的语法,不作过多解释,网上有许多学习的资料.这里主要介绍Python中常用的正则表达式处理函数. 方法/属性 作用 match() 决定 R ...
随机推荐
- sql字段字符用做其他类型查询
select * FROM aa where parent = %@ ORDER BY cast(seq as integer) ASC
- Swift中懒加载(lazy initialization)的实现
Swift中是存在和OC一样的懒加载机制的,但是这方面国内的资料比较少,今天把搜索引擎换成了Bing后发现用Bing查英文\最新资料要比百度强上不少. 我们在OC中一般是这样实现懒加载初始化的: 1: ...
- 如何移除inline-block元素之间的空白
我们想要的是<li>元素可以紧贴在一起,但是很显然,结果“出乎意料”.那么有什么方法可以让结果符合我们的预期呢?所能想到的解决方法至少有以下四种,而每种方法也都有其优劣所在,至于要如何选择 ...
- Oracle查询库中记录数大于2千万的所有表
Oracle查询库中记录数大于2千万的所有表 假如当前用户拥有select any table权限,则可以使用下列sql语句: select table_name, num_rows from dba ...
- C#调用页面中的窗体中的方法,获取窗体的元素。
页面中的窗体 <div class="div_width" style="width: 100%; height: 95%;"> <ifram ...
- HashMap深度解析(一)
HashMap可以说是Java中最常用的集合类框架之一,是Java语言中非常典型的数据结构,我们总会在不经意间用到它,很大程度上方便了我们日常 开发.在很多Java的笔试题中也会被问到,最常见的,“H ...
- javascript函数,构造函数。js对象和json的区别。js中this指向问题
函数是由事件驱动的或者当它被调用时执行的可重复使用的代码块.好处:在出现大量程序相同的时候,可以封装为一个function,这样只用调用一次,就能执行很多语句.(1)语法:函数就是包裹在花括号中的代码 ...
- [Linux]nginx tomcat做负载均衡
之前使用nginx做过web反向代理,没有做过负载均衡,今天有个同学须要做tomcat的负载均衡,我也研究下. 一共是2个机器,一个物理机(win7)上面部署2个tomcat,使用不同的port启动. ...
- 本机搭建PHP环境全教程(图文)
为了更好的维护空间网站,研究和调试PHP程序,许多人需要在自己的计算机内搭建PHP环境.本文将介绍使用phpnow环境组件搭建的全过程.使用搜索工具,搜索phpnow<ignore_js_op& ...
- Delphi 最小化程序到任务栏托盘 增加右键PopMenu
在做中间层时,中间层往往不需要点击关闭时立刻关闭,而是最小化到托盘.故而特意隐藏关闭按钮功能. 1)隐藏退出功能 用PopMenu退出菜单代替 1.增加popMenu退出菜单,绑定到窗体 2.增加变量 ...