python与正则表达式
2017-11-25 20:45
369 查看
正则表达式
推荐一本书:《Sams Teach Yourself Regular Expressions in 10 Minutes》。下面列举常用的regex元字符。
元字符 | 作用 |
---|---|
. | 任意字符匹配 |
\ | 转义特殊字符 |
[ ] | 使用[和]来包含一个字符集合,代表和其中任意一个成员匹配的文本 |
\w | 字母、数字 |
\d | 数字 |
( ) | 常常用于子表达式的构建 |
\E | 结束\L或\U的转换 |
\U | 将\U和\E之间的字符全部转换成大写字符 |
\L | 将\L和\E之间的字符全部转换成小写字符 |
\u | 将\u后面的字符或者子集变成大写字符 |
\l | 将\l后面的字符或者子集变成小写字符 |
[\b] | 回退删除 backspace |
\f | 换页 |
\n | 换行 |
\r | 回车 |
\t | 制表符 tab |
\v | 垂直制表符 |
\s | 空白符 |
\b | 匹配着这样的位置:位于一个能构成单词的字符(字母,数字,下划线。\w)和不能构成单词的字符(\W)之间对于cat scatter文本,\bcat\b仅仅匹配第一个单词cat |
* | 匹配0个或者多个 |
+ | 匹配至少一个 |
{n,m} | 匹配n到m个 |
贪婪型元字符 | 懒惰型元字符 |
---|---|
* | *? |
+ | +? |
{n,} | {n,}? |
是一个很棒的用于练习正则表达式的文本工具。
正则表达式在python中的应用
正则表达式模式匹配
正则表达式模块re是python自带的。基本步骤:
导入re库
创建Regex对象
搜索并返回match对象
返回匹配的字符串
>>> import re >>> regex = re.compile(r"\d{3}-\d{3}-\d{4}") >>> match = regex.search('231-345-8972') >>> print(match.group()) 231-345-8972
正则分组
通过group返回正则分组>>> import re >>> regEx = re.compile(r'(\d{3})-(\d{3})-(\d{4})') >>> mo = regEx.search('231-345-8972') >>> mo.group(1) '231' >>> mo.group(2) '345' >>> mo.group(3) '8972' >>> mo.group(0) '231-345-8972' >>>
返回所有的分组
>>> mo.groups() ('231', '345', '8972')
正则表达式的贪心和非贪心
?在正则表达式中可以表示可选,也能表示非贪心匹配。
#! /usr/bin/python import re batRegex = re.compile(r'(Ha){3,5}') mo = batRegex.search('HaHaHaHaHa') print(mo.group()) batRegex = re.compile(r'(Ha){3,5}?') mo = batRegex.search('HaHaHaHaHa') print(mo.group())
执行:
[edemon@CentOS workspace]$ ./regex.py HaHaHaHaHa HaHaHa
regex对象的search和findall
search方法在找到第一个匹配的内容后即停止了工作,但是findall会返回所有的字符串,以list的形式供我们处理。#! /usr/bin/python import re text = '''231-345-8972 213-324-5476''' print("origin text is:\n"+text) regex = re.compile(r'\d{3}-\d{3}-\d{4}') mo = regex.search(text) print("search result is:" + str(mo.group())) rlist = regex.findall(text) print("findall result is:" + str(rlist))
运行效果:
[edemon@CentOS workspace]$ ./regex.py origin text is: 231-345-8972 213-324-5476 search result is:231-345-8972 findall result is:['231-345-8972', '213-324-5476']
常用字符分类缩写
分类字符 | 表示 |
---|---|
\d | 0-9的任何数字 |
\D | 除0-9的数字以外的字符 |
\w | 字母、数字、下划线字符 |
\W | 除字母、数字、下划线以外的任何字符 |
\s | 空白字符(空格、制表符、换行符) |
\S | 除空白字符以外的字符 |
匹配换行
如果使得re.DOTALL作为re.compile()第二个参数,那么.将匹配所有的字符,包括换行。
re.DOTALL
Make the ‘.’ special character match any character at all, including a newline; without this flag, ‘.’ will match anything except a newline.
不区分大小写的匹配
给re.compile()传入第二个参数re.IGNORECASE或re.I则不理会字母的大小写。如下:
import re text = 'Hello World' mo = re.compile('hello world',re.I) print(mo.search(text).group()) # Hello World
VERBOSE
compile的flag: re.VERBOSE可使得正则表达式中的注释、多余空白字符都被忽略。这样增强了阅读性。更多的应用技巧,需要靠实践掌握了。
相关文章推荐
- python 正则表达式
- Python 正则表达式查询相似的字符串
- python正则表达式匹配sql语句中的表名
- python 正则表达式的学习
- python 正则表达式 概述及常用字符
- python正则表达式记录
- Python3 正则表达式特殊符号及用法(详细列表)
- Python正则表达式—re模块接口
- python中常用正则表达式
- 【Python】正则表达式
- python | 史上最全的正则表达式
- python 正则表达式对转义符的处理
- Python 正则表达式
- Python 学习入门(13)—— 正则表达式
- Python正则表达式的用法
- python学习笔记21(正则表达式)
- Python正则表达式初识(七)
- 使用Python正则表达式提取搜索结果中的站点
- Python中正则表达式的用法总结
- python的正则表达式