python 正则相关函数全解析
前言:
网上有很多关于python正则函数的方法说明,这里尽可能用最简单的demo把所有函数之间的逻辑关系说清楚,供参考。
1.最原始的 re.compile()
这个函数一般是需要和其它函数一起使用的,单独存在没有意义,但是要说明的是,这个函数是对正则表达式进一步的使用有很大帮助。
eg,
测试字符串:
test_str = "I am 18years old,you are 16Years old,so good!"
1
测试正则表达式:
pattern = r'(\d+)([a-z]+)', 匹配数字小写字母的连接字符串(注:括号里面的匹配可单独获取)
1
生成正则对象:
p = re.compile(pattern, re.I),re.I 是忽略大小写的意思
def compile(pattern, flags=0):函数flags有默认值,也可以不传这个参数
1
2
3
这里列举几个常用的模式:
re.I(re.IGNORECASE): 忽略大小写
re.M(MULTILINE): 多行模式,改变’^’和’$’的行为
re.S(DOTALL): 点任意匹配模式,改变’.’的行为
re.L(LOCALE): 使预定字符类 \w \W \b \B \s \S 取决于当前区域设定
re.U(UNICODE): 使预定字符类 \w \W \b \B \s \S \d \D 取决于unicode定义的字符属性
1
2
3
4
5
2.match,search,findall与re.compile连用
match:
默认是从字符串开始进行匹配,也可以给参数pos传入整数作为开始匹配位置
匹配不到返回None,匹配到第一个就返回匹配对象,用group获取具体字符串
eg,
import re
test_str = "I am 18years old,you are 16Years old,so good!"
pattern = r'(\d+)([a-z]+)'
p = re.compile(pattern, re.I)
text_object = p.match(string=test_str, pos=5)
print text_object.group()
result:
18years
1
2
3
4
5
6
7
8
9
10
大多时候会把正则放在match函数里面,这样会减少一点代码量
eg,
text_object = re.match(r'(\d+)([a-z]+)', test_str, re.I)
缺点是不能指定开始匹配的位置,默认从开始位置匹配
1
2
search:
默认从字符串开始到结束顺序匹配,也可以给参数pos传入整数作为开始匹配位置
匹配不到返回None,匹配到第一个就返回匹配对象,用group获取具体字符串
eg,
import re
test_str = "I am 18years old,you are 16Years old,so good!"
pattern = r'(\d+)([a-z]+)'
p = re.compile(pattern, re.I)
text_object = p.search(string=test_str, pos=20)
print text_object.group()
print text_object.group(1)
print text_object.group(2)
result:
16Years
16
Years
1
2
3
4
5
6
7
8
9
10
11
12
13
14
或者
re.search(r'(\d+)([a-z]+)', test_str, re.I)
因为没办法指定开始位置,所以只能匹配到 18years
1
2
findall:
默认把字符串所有满足条件的字符子串都找出来,返回是一个str类型的组,
也可以pos指定开始位置,endpos指定结束位置
eg,
import re
test_str = "I am 18years old,you are 16Years old,so good!"
pattern = r'(\d+)([a-z]+)'
p = re.compile(pattern, re.I)
str_arr = p.findall(test_str)
print str_arr
result:
[('18', 'years'), ('16', 'Years')]
因为正则表达式是分组的,所以返回的也是分组的
1
2
3
4
5
6
7
8
9
10
11
12
或者:
re.findall(pattern=r'(/d+)([a-z]+)', string=test_str, flags=re.I)
1
另:还有一个 find 函数,有时候会搞混,其实和 findall 没一点关系,
find 函数是 str.find(),属于字符串的函数,返回的是字符串的下标。
3.finditer 的特殊性
finditer 返回的是一个匹配对象的迭代器,迭代器的好处是减少内存消耗,处理比较简单的文本用不上,一次返回数据量太多的时候用处很大。
import re
test_str = "I am 18years old,you are 16Years old,so good!"
pattern = r'(\d+)([a-z]+)'
p = re.compile(pattern, re.I)
iter_p = p.finditer(test_str)
for iter_next in iter_p:
print iter_next.group()
result:
18years
16Years
1
2
3
4
5
6
7
8
9
10
11
12
4.字符串替换 sub
import re
test_str = "I am 18years old,you are 16Years old,so good!"
pattern = r'(\d+)([a-z]+)'
p = re.compile(pattern, re.I)
new_string = p.sub('17years', test_str)
print new_string
result:
I am 17years old,you are 17years old,so good!
1
2
3
4
5
6
7
8
9
10
11
或者:
re.sub(pattern=r'(\d+)([a-z]+)', repl='17years', string=test_str, count=1, flags=re.I)
count 参数指定替换的个数
result:
I am 17years old,you are 16Years old,so good!
1
2
3
4
5.字符串分隔 split
import re
test_str = "I am 18years old,you are 16Years old,so good!"
arr = re.split(r'[,\d]', test_str)
print arr
result:
['I am ', '', 'years old', 'you are ', '', 'Years old', 'so good!']
1
2
3
4
5
6
7
8
6.有需要再补充
————————————————
版权声明:本文为CSDN博主「清泉影月」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qingquanyingyue/article/details/94300298
python 正则相关函数全解析的更多相关文章
- python基础--函数全解析
函数(重点) (1)初始函数 在认识函数之前,我们先做如下的需求: 让你打印10次"我爱中国,我爱祖国".我们在接触函数之前是这样写的. print('我爱中国,我爱祖国') pr ...
- python基础--函数全解析(2)
函数的重点知识补充 (1)补充的两个小知识点(global,nonlocal) 1.global的使用 我们在补充这两个知识点之前,我们先看一下下面这个例子: a = 1 def func(): pr ...
- Python 最常见的 170 道面试题全解析:2019 版
Python 最常见的 170 道面试题全解析:2019 版 引言 最近在刷面试题,所以需要看大量的 Python 相关的面试题,从大量的题目中总结了很多的知识,同时也对一些题目进行拓展了,但是在看了 ...
- Python 基础之正则之二 匹配分组,正则相关函数及表达式修饰符
四.匹配分组 [元字符] 分组符号 a|b 匹配字符a 或 字符b (如果两个当中有重合部分,把更长的那个放前面) (ab) 匹配括号内的表达式 ,将()作为一个分组 num 引用分组 ...
- Python正则处理多行日志一例
正则表达式基础知识请参阅<正则表达式基础知识>,本文使用正则表达式来匹配多行日志并从中解析出相应的信息. 假设现在有这样的SQL日志: SELECT * FROM open_app WHE ...
- Python正则匹配字母大小写不敏感在读xml中的应用
需要解决的问题:要匹配字符串,字符串中字母的大小写不确定,如何匹配? 问题出现之前是使用字符串比较的方式,比如要匹配'abc',则用语句: if s == 'abc':#s为需要匹配的字符串 prin ...
- MySQL慢日志查询全解析:从参数、配置到分析工具【转】
转自: MySQL慢日志查询全解析:从参数.配置到分析工具 - MySQL - DBAplus社群——围绕数据库.大数据.PaaS云,运维圈最专注围绕“数据”的学习交流和专业社群http://dbap ...
- syslog之二:syslog协议及rsyslog服务全解析
目录: <syslog之一:Linux syslog日志系统详解> <syslog之二:syslog协议及rsyslog服务全解析> <syslog之三:建立Window ...
- Python正则处理多行日志一例(可配置化)
正则表达式基础知识请参阅<正则表达式基础知识>,本文使用正则表达式来匹配多行日志并从中解析出相应的信息. 假设现在有这样的SQL日志: SELECT * FROM open_app WHE ...
随机推荐
- Go的包管理工具(一)
在前面转载了系列文章:Golang 需要避免踩的 50 个坑,总得来说阅读量都挺大.今天这篇文章,咱们一起聊聊Go的依赖包管理工具. 背景 每一门语言都有其依赖的生态,当我们使用Java语言的时候,使 ...
- java7:核心技术与最佳实践读书笔记——对象生命周期
流程:字节码文件(.class) -> 类加载 -> 类链接 -> 类初始化 -> 对象初始化 -> 对象创建 -> 对象使用 -> 对象回收 . 1.Jav ...
- 电脑串口(com)被占用问题
最近使用串口与设备通信. 这个电脑一个有6个COM口,都要使用. 还有自带一个华为的4G通信模块,这个模块需要虚拟出4个COM口. 使用之前的Gost系统(只有1个物理COM版本的),导致物理COM口 ...
- Python中,标识符用法
Python中,标识符 在Python中,所有标识符都可以包括英文.数字和下划线(),但不能包括数字.python中的标识符区分大小写.这是知识的背景.但通常,Python成为以下划线开头的标识符的习 ...
- 基于Vue实现拖拽效果
参考地址:基于Vue实现拖拽效果 参考链接中讲的比较详细,我只使用了其中自定义指令的方法.整体代码如下: <template> <!-- 卡片 --> <div clas ...
- Spring注解实践
原文:http://blog.csdn.net/xyh820/article/details/7303330 概述 注释配置相对于 XML 配置具有很多的优势: 它可以充分利用 Java 的反射机制获 ...
- 2.XML语言
XML语言 常见应用: XML技术除用于 /*保存有关系的数据*/之外,它还经常作软件配置文件,以描述程序模块之间的关系. 在一个系统软件中,为提高系统的灵活性,它所启动的模块通常由其配置文件决定 例 ...
- asp.net mvc5 DataBase First下model校验问题(MetadataType使用)
最近学习asp.net mvc5,使用 asp.net mvc5+EF6+AutoFac做个小Demo,其中是先设计的数据库表,就直接选择了EF的DataBase First(三种开发模式分别是c ...
- JavaSpring【五、AOP基础】
概念: AOP--面向切面编程,通过预编译/动态代理实现程序功能的统一维护 主要功能是:日志.性能统计.安全控制.事务处理.异常处理 实现方式 预编译--AspectJ 动态代理--SpringAOP ...
- Oracle和MySql的分页查询区别和PL/SQL的基本概念
Oracle和MySql的分页查询区别: Oracle的分析查询,之前Oracle的分页是使用伪列 ROWNUM 结合子查询实现,mysql的分页更简单,直接使用 LIMIT 关键字就可以实现 ...