博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

re模块(正则表达式)

Posted on 2019-01-04 22:02  GraceNana  阅读(198)  评论(0编辑  收藏  举报

正则表达式(Regular Experssion)是对字符串操作的一种逻辑公式. 简称regex或re

优点 : 灵活, 功能性强, 逻辑性强

缺点 : 上手难. 

工具 : 各大文本编辑器一般都有正则匹配功能,也可以去http://tool.chinaz.com/regex/进⾏行行在线测试. 

1. 字符组 [a-zA-Z0-9] 

2. 简单元字符(常用)

.     匹配除换行符以外的任意字符
\w    匹配字母或数字或下划线
\s    匹配任意空白符
\d    匹配数字
\n    匹配一个换行符
\t    匹配一个制表符
\b    匹配一个单词的结尾
^     匹配字符串的开始
$     匹配字符串的结尾
\W    匹配非字母或数字或下划线
\D    匹配非数字
\S    匹配非空白符
a|b   匹配字符a或字符b
()    匹配括号内的表达式,也表示一个组
[...] 匹配字符组中的字符
[^...]匹配除了字符组中的字符的所有字符

3.量词(一次性匹配多个字符)

*    重复0次或者更多次
+    重复1次或者更多次
?    重复0次或者1次
{n}  重复n次
{n,} 重复n次或者更多次
{n,m}重复n到m次

4.惰性匹配和贪婪匹配

在量词中的 * , + , {} 都属于贪婪匹配.尽可能匹配到多的结果

.*? 则是尽可能少匹配,表示惰性匹配. 例: .*?x 是找到下一个x位置

5.分组       正则中使用()进行分组. 

6. 转义   特殊意义的元字符如\n或者\s,如果需要匹配对应的字符串,需要对\进行转义.由于Python中的特殊字符也需要转义,比较复杂,因此使用 r'\n'即可,这是只需要正则表达式内部转义即可r'\\n'   →  '\n'

re模块

re模块是python提供的一套关于处理正则表达式的模块.核心功能有四个:

1.findall 查找所有.返回list

import re
lst = re.findall('a' , 'happy birthday!!')
print(lst)               #['a', 'a']
lst = re.findall(r'\d+' , '5apple6banana')
print(lst)                #['5', '6']

2.search 会进行匹配.但如果匹配到了第一个结果,就会返回这个结果.如果匹配不到search返回的则是None

ret = re.search('a','happy birthday!!') #<re.Match object; span=(1, 2), match='a'>
print(ret)  #a

3.match 只能从字符串的开头进行匹配

import re
ret = re.match('a','apply apple').group()
print(ret)   #a

4.finditer 和 findall差不多.只不过返回的是迭代器

import re
it = re.finditer('\d' , 'apple6 banana7')
for el in it:
    print(el.group(), end=' ') #6 7 

5.其他操作

ret = re.split('[ab]', 'qwerafjbcd')  # 先按a分割,再按b分割
print(ret)  # ['qwer', 'fj', 'cd']

ret = re.sub(r"\d+", "_a_", "alex250ta")  # 把字符串中的数字换成_a_
print(ret)   #alex_a_ta

ret = re.subn(r"\d+", "_a_", "alex250ta")  # 把字符串中的数字换成_a_返回元组包含次数
print(ret)    #('alex_a_ta', 1)

obj = re.compile(r'\d{3}')    #将这则表达式编译成正则表达式对象
ret = obj.search('abc123eeee')    匹配字符串
print(ret.group())     #123