正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配。
re 模块使 Python 语言拥有全部的正则表达式功能。
compile 函数根据一个模式字符串和可选的标志参数生成一个正则表达式对象。该对象拥有一系列方法用于正则表达式匹配和替换。
re 模块也提供了与这些方法功能完全一致的函数,这些函数使用一个模式字符串做为它们的第一个参数。
1. compile 函数
在进行正则表达式的计算时,通常我们先将字符串编译成pattern实例,然后在进行匹配的操作,之后在进行其他的操作
而compile()函数就是用来创建pattern实例的
例子:
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
__author__ = '217小月月坑'
'''
compile()函数的使用
1. 将正则表达式编译成pattern对象
2. 创建一个变量用来存放要寻找的字符串
3. 使用re模块里面的函数进行相对应的操作
'''
import re
# 1. abc是正则表达式,将他编译成pattern对象
pattern = re.compile(r'abc')
# 2. str变量用来存放被查找的字符串
str = 'abcdefghigk'
# 3. 使用re.match 函数查找,并将结果保存在result变量中
result = re.match(pattern,str)
# 4. 如果成功匹配则打印该结果,不成功输出相应信息
if result:
print (result.group())
else:
print 'not match'
2. 常用到的re模块
1. re.compile(pattern, flags=0)
编译正则表达式,返回pattern对象,然后可以通过pattern对象调用其他方法
2. re.search(pattern, string, flags=0)
在字符串中查找,是否能匹配正则表达式。成功返回匹配到的内容,如果不能匹配返回None
3. re.match(pattern, string, flags=0)
字符串的开头是否能匹配正则表达式。成功返回匹配到的内容,如果不能匹配返回None
注意:match只是匹配字符串的开头,而search匹配整个字符串
4. re.split(pattern, string, maxsplit=0)
通过正则表达式将字符串分离。maxsplit是分离的次数,maxsplit=1分离一次,默认为0,不限制次数
1. 如果用括号将正则表达式括起来,那么匹配的字符串也会被列入到list中返回
例子:\W+ 是匹配费字母数字
>>> import re
>>> re.split('\W+', 'Words, words, words.')
['Words', 'words', 'words', '']
>>> re.split('(\W+)', 'Words, words, words.')
['Words', ', ', 'words', ', ', 'words', '.', '']
2. 如果在字符串的开始或结尾就匹配,返回的list将会以空串开始或结尾
>>> re.split('(\W+)', '...words, words...')
['', '...', 'words', ', ', 'words', '...', '']
3. 如果字符串不能匹配,将会返回整个字符串的list
>>> re.split("a","bbb")
['bbb']
5. re.findall(pattern, string, flags=0)
找到匹配的所有子串,并把它们作为一个列表返回。这个匹配是从左到右有序地返回。如果无匹配,返回空列表
>>> re.findall("a","bcdef")
[]
>>> re.findall(r"\d+","12a32bc43jf3")
['12', '32', '43', '3']
6. re.finditer(pattern, string, flags=0)
找到匹配的所有子串,并把它们作为一个迭代器返回。这个匹配是从左到右有序地返回。如果无匹配,返回空列表。
>>> it = re.finditer(r"\d+","12a32bc43jf3")
>>> for match in it:
print match.group()
12
32
43
3
7. re.sub(pattern, repl, string, count=0, flags=0)
找到 RE 匹配的所有子串,并将其用一个不同的字符串替换。可选参数 count 是模式匹配後替换的最大次数;
count 必须是非负整数。缺省值是 0 表示替换所有的匹配。如果无匹配,字符串将会无改变地返回。
8. re.subn(pattern, repl, string, count=0, flags=0)
与re.sub方法作用一样,但返回的是包含新字符串和替换执行次数的两元组
9. re.escape(string)
对字符串中的非字母数字进行转义
10. re.purge()
清空缓存中的正则表达式
3. 关于 flags
上面列举的很多函数都有flags这个参数,flags是正则表达式修饰符,他是一个可选标志
正则表达式可以包含一些可选标志修饰符来控制匹配的模式。修饰符被指定为一个可选的标志。
多个标志可以通过按位 OR(|) 它们来指定。如 re.I | re.M 被设置成 I 和 M 标志:
各修饰符的含义如下
re.I 使匹配对大小写不敏感
re.L 做本地化识别(locale-aware)匹配
re.M 多行匹配,影响 ^ 和 $
re.S 使 . 匹配包括换行在内的所有字符
re.U 根据Unicode字符集解析字符。这个标志影响 \w, \W, \b, \B.
re.X 该标志通过给予你更灵活的格式以便你将正则表达式写得更易于理解。