一个关于Python正则表达式的快速使用手册
一直在纠结自己的博客到底应该写一些什么东西,这几天发现自己的正则用的不是很熟练,于是想要写一篇关于正则表达式的博客,目的就是为了让自己以后要用而又不会的时候不至于像无头苍蝇一样到处乱撞。
有些人在碰到问题时,就像:“我知道,我可以使用正则表达式。”现在,他们就有了两个问题。(Jamie “jwz” Zawinski,1997年8月 Netscape和Mozilla.org的创始人之一)
jwz所说的两个问题:一个就是要解决的问题,一个就是如何使用正则表达式解决问题------这本身就是个问题了,由此可见学会并熟练使用正则表达式是多么的重要~~~
因为我主要是使用Python,所以先说明在Python中是通过re模块来支持正则表达式。
re模块中有许多强大的方法:
| 函数/方法 | 描述 |
| compile(pattern,flags=0) | 使用任何可选的标记来“编译”正则表达式模式,返回一个正则表达式对象 |
| match(pattern,string,flags=0) | 尝试使用正则表达式匹配字符串,如果匹配成功,就返回匹配对象,如果失败就返回None |
| search(pattern,string,flags=0) | 使用可选标记搜索字符串中第一次出现的正则表达式模式,如果匹配成功就返回匹配对象,如果失败就返回None |
| findall(pattern,string[,flags]) | 查找字符串中所有(非重复)出现的正则表达式模式,返回一个匹配列表 |
| finditer(pattern,string[,flags]) | 与fandall相同,但返回的不是列表,而是一个迭代器。每一次迭代返回一个正则表达式对象 |
| split(pattern,string,max=0) | 根据正则表达式的模式分隔符,将字符串分割为列表,然后返回成功匹配的列表,分割最多操作max次(默认是分割所有) |
| sub(pattern,repl,string,count=0) | 使用repl替换正则在字符串中匹配到的位置,除非自定义count,否则就替换所有匹配到的位置 |
| purge() | 清除隐式编译的正则表达式模式 |
| group(num=0) | 返回整个匹配对象,或者编号为num的子组 |
| groups(default=None) | 返回一个包含所有匹配子组的元组,如果没有匹配到就返回空元组 |
| groupdic(default=None) | 返回一个包含所有匹配的命名子组的字典,所有的子组名称作为字典的key,如果没有匹配到就返回一个空字典 |
compile()函数是用来编译正则表达式的,所以从match()说起
使用match()方法匹配字符串
>>> import re
>>> m = re.match('foo','foo')
>>> m.group() #使用group()方法返回匹配结果
'foo' #证明匹配失败返回None
>>> m = re.match('foo','fll')
>>> m.group()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'NoneType' object has no attribute 'group' None类型没有group属性,就是说m是None #match是从字符串开始部分匹配,也就是f对应f,o对应o,所以匹配成功
>>> re.match('foo','food').group()
'foo'
#而这个例子里从开始匹配的话,f对应s,所以匹配失败
>>> re.match('foo','sfood').group()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'NoneType' object has no attribute 'group'
上述例子中foo匹配sfood失败,但foo却实实在在存在于sfood中,这里就要用search()使用搜索而不是去匹配
>>> m = re.search('foo','sfood')
>>> m.group()
'foo'
group()与groups()的使用示例:
>>> m = re.match('(\w\w\w)-(\d\d\d)','abc-123')
>>> m.group()
'abc-123'
>>> m.group(1)
'abc'
>>> m.group(2)
''
>>> m.groups() #groups只匹配子组,也就是加()的那些内容
('abc', '')
匹配邮箱的示例:
>>> re.match('\w+@\w+\.com','awmpy@qq.com').group()
'awmpy@qq.com'
findall()和finditer()的使用示例:
>>> s = 'This and that'
>>> re.findall(r'(th\w+)',s,re.I)
['This', 'that'] #findall返回的就是列表
>>> it = re.finditer(r'(th\w+)',s,re.I) #生成一个迭代器
>>> g = it.__next__()
>>> g.groups()
('This',) #groups返回值是一个元组,g每次迭代取一个值
>>> g.group(1)
'This'
>>> g = it.__next__()
>>> g.groups()
('that',)
>>> g.group(1)
'that'
>>> [g.group(1) for g in re.finditer(r'(th\w+)',s,re.I)] #使用列表解析形成列表
['This', 'that']
>>>
sub()和subn()函数使用示例:
>>> re.sub('[ae]','X','abcdef')
'XbcdXf'
>>> re.subn('[ae]','X','abcedf')
('XbcXdf', 2)
>>>
split()函数的使用
re.split()实际上在Python中str对象也有split属性,但是re.split的存在就是因为他可以结合re的扩展匹配,完成比较复杂的分割
>>> import re
>>> DATA = {
... 'Mountain View, CA 94040',
... 'Sunnyvale, CA',
... 'Los Altos, 94606',
... 'Cupertino 95401',
... 'Palo Alto CA',
... }
>>> for item in DATA:
... print(re.split(', |(?= (?:\d{5}|[A-Z]{2})) ', item))
...
['Mountain View', 'CA', '']
['Cupertino', '']
['Sunnyvale', 'CA']
['Los Altos', '']
['Palo Alto', 'CA']
>>>
#使用正向前视断言将','还有后边是两个大写字母和5个数字的空格用','分割开
一个关于Python正则表达式的快速使用手册的更多相关文章
- 从0开始的Python学习001快速上手手册
假设大家已经安装好python的环境了. Windows检查是否可以运行python脚本 Ctrl+R 输入 cmd 在命令行中输入python 如果出现下面结果,我们就可以开始python的学习了. ...
- Python正则表达式操作指南(转)
原文出处:http://www.amk.ca/python/howto/regex/ 适用版本:Python 1.5 及后续版本 摘要 本文是通过Python的 re 模块来使用正则表达式的一个入门教 ...
- Python正则表达式操作指南
摘要 本文是通过Python的 re 模块来使用正则表达式的一个入门教程,和库参考手册的对应章节相比,更为浅显易懂.循序渐进. 本文可以从 http://www.amk.ca/python/howto ...
- 学会python正则表达式就是这么简单
一前言 本篇文章带大家快速入门正则表达式的使用,正则表达式的规则不仅适用python语言,基本大多数编程语言都适用,在日常使用中极为广泛,读者们有必要学好正则表达式.看完这篇文章,读者们要理解什么是正 ...
- Python正则表达式就是这么简单【新手必学】
一前言本篇文章带大家快速入门正则表达式的使用,正则表达式的规则不仅适用python语言,基本大多数编程语言都适用,在日常使用中极为广泛,读者们有必要学好正则表达式.看完这篇文章,读者们要理解什么是正则 ...
- [.net 面向对象程序设计进阶] (2) 正则表达式 (一) 快速入门
[.net 面向对象程序设计进阶] (2) 正则表达式 (一) 快速入门 1. 什么是正则表达式? 1.1 正则表达式概念 正则表达式,又称正则表示法,英文名:Regular Expression(简 ...
- 比较详细Python正则表达式操作指南(re使用)
比较详细Python正则表达式操作指南(re使用) Python 自1.5版本起增加了re 模块,它提供 Perl 风格的正则表达式模式.Python 1.5之前版本则是通过 regex 模块提供 E ...
- Python天天美味(15) - Python正则表达式操作指南(re使用)(转)
http://www.cnblogs.com/coderzh/archive/2008/05/06/1185755.html 简介 Python 自1.5版本起增加了re 模块,它提供 Perl 风格 ...
- Python正则表达式Regular Expression基本用法
资料来源:http://blog.csdn.net/whycadi/article/details/2011046 直接从网上资料转载过来,作为自己的参考.这个写的很清楚.先拿来看看. 1.正则表 ...
随机推荐
- 爬虫之爬取网贷之家在档P2P平台基本数据并存入数据库
python 版本 :3.5.2 Jupyter Notebook 使用库: reuqests (For human) json (用来加载JSON数据) datetime (用来记录抓取所花时间,也 ...
- hibernate注解的简单应用
注解代替了我们用的*.hbm.xml文件.简少了我们的代码量:应用简单. @Override 用途:重写父类的同名方法 单元测试注解 @Test 用途:用于测试 @Before 用途:单测方法走之前执 ...
- DLL 导出变量
声明为导出变量时,同样有两种方法: 第一种是用__declspec进行导出声明 #ifndef _DLL_SAMPLE_H #define _DLL_SAMPLE_H // 如果定义了C++编译器 ...
- C# 6 与 .NET Core 1.0 高级编程 - 40 ASP.NET Core(下)
译文,个人原创,转载请注明出处(C# 6 与 .NET Core 1.0 高级编程 - 40 章 ASP.NET Core(下)),不对的地方欢迎指出与交流. 章节出自<Professiona ...
- C#开发人员应该知道的13件事情
本文讲述了C#开发人员应该了解到的13件事情,希望对C#开发人员有所帮助. 1. 开发过程 开发过程是错误和缺陷开始的地方.使用工具可以帮助你在发布之后,解决掉一些问题. 编码标准 遵照编码标准可以编 ...
- 《经久不衰的Spring框架:@ResponseBody 中文乱码》
问题背景 本文并不是介绍@ResponseBody注解,也不是中文乱码问题的大汇总笔记,这些网上都有很多内容了.这边仅对几年前,一个卡壳了挺久时间的问题的解决过程做一个记录,以警惕自己,达到自醒得目的 ...
- Nginx+Python+uwsgi+Django的web开发环境安装及配置
Nginx+Python+uwsgi+Django的web开发环境安装及配置 nginx安装 nginx的安装这里就略过了... python安装 通常系统已经自带了,这里也略过 uwsgi安装 官网 ...
- 基于CPS变换的尾递归转换算法
前言 众所周知,递归函数容易爆栈,究其原因,便是函数调用前需要先将参数.运行状态压栈,而递归则会导致函数的多次无返回调用,参数.状态积压在栈上,最终耗尽栈空间. 一个解决的办法是从算法上解决,把递归算 ...
- 每天一个linux命令(34)--top命令
今天给领导发邮件,我这边虽然显示发出去了,但是他那边一直没收到,结果我以为我发了,他又一直在那边等结果.所以说,以后要另外发个信息或者QQ微信之类的说一声. top命令是Linux 下常用的性能分析工 ...
- 翻译:使用 Redux 和 ngrx 创建更佳的 Angular 2
翻译:使用 Redux 和 ngrx 创建更佳的 Angular 2 原文地址:http://onehungrymind.com/build-better-angular-2-application- ...