python正则的使用
import re
元字符:
符号 | 描述 |
---|---|
. | 通配符,匹配除换行符外的所有字符,一次只能匹配一个字符 |
^ | 匹配的字符必须在字符串开头 |
$ | 匹配的字符必须在字符串结尾 |
* | 匹配 * 前面的字符0或多次 |
+ | 匹配 + 前面的字符1或多次 |
? | 匹配?前面的字符0或1次 |
{} | 匹配{m,n}前面的字符m-n次 |
[] | 匹配 [] 中的某一个字符。在[]中,.(通配符)将失去作用,^在[]里使用代表取反,反斜杠在[]中仍有特殊作用 |
\ | 反斜杠后面跟元字符去除元字符特殊功能,后面跟普通字符实现特殊功能 |
\d | 匹配任何 一个十进制数,相当于[0-9] |
\D | 匹配任意一个非数字字符,相当于[^0-9] |
\s | 匹配一个空白字符,等价于[\t\n\r\f\v] |
\S | 匹配一个非空白字符,等价于[^\t\n\r\f\v] |
\w | 匹配任意一个字母数字或下划线,等价于[a-zA-Z0-9_] |
\W | 匹配除字母数字或下划线外的任意一个字符,等价于[^a-zA-Z0-9_] |
\b | 匹配一个单词的边界,在需要匹配的单词两边放入\b |
re模块中一些重要函数
函数 | 描述 |
---|---|
compile(patern[, flags]) | 根据包含正则表达式的字符串穿件模式对象 |
search(pattern, string[, flags]) | 在字符串中寻找模式 |
match(pattern, string[, flags]) | 在字符串的开始处匹配模式 |
split(pattern, string[, maxsplit=0]) | 根据模式的匹配项来分割字符串 |
findall(pattern, string) | 列出字符串中模式的所有匹配项 |
sub(pattern, replace, string[, count=0]) | 将字符串中所有pattern的匹配项用replace替换 |
secape(string) | 将字符串中所有特殊正则表达式字符转义 |
1、re.findall(pattern,string):查找匹配项,返回包含所有匹配项的列表,没有匹配项返回空列表。注:如果匹配项里有组,则会优先取出组里的匹配项,如果想取出完整匹配项则在组的开始加上?:(问号和冒号)
2、re.match(pattern,string[,flags]):从字符串开头进行匹配,成功返回Match对象,失败返回None
3、re.search(pattern,string[,flags]):在string中匹配pattern,成功返回Match对象,失败返回None,只返回第一个
注:flags默认为0,其它可选项:
re.I(大写i) 使匹配对大小写不敏感
re.M 多行匹配,影响 ^ 和 $
re.S 使 .(通配符)匹配包括换行符在内的所有字符
4、re.sub(pat,repl,string[count=0]):将字符串中所有pat的匹配项用repl替换,count参数代表替换次数
5、re.subn(pat,repl,string[count=0]):和sub()功能一样,不同的是此函数返回被替换次数
6、re.split(pattern,string[, maxsplit=0]):根据匹配项分割字符串,返回列表
7、re匹配对象的方法:
>>> s = 'to be or not to be'
>>> r = re.match(r'to\b\s(be)\b', s)
>>> r.group()
'to be'
>>> r.groups()
('be',)
>>> r = re.match(r'to\b\s(?P<key>be)\b', s)
>>> r.groupdict()
{'key': 'be'}
group([group1,…]) 返回匹配到的字符串
groups() 返回匹配到的分组结果,以元组形式返回
groupdict() 以匹配到的分组结果作为值,以指定key作为键,以字典形式返回
start([group]) 返回给定组匹配项的开始索引(默认为0)
end([group]) 返回给定组匹配项的结束索引加1
span([group]) 以元组形式返回一个组的start和end
8、re.finditer():匹配成功返回迭代器对象,可在for循环中使用group()等re匹配对象方法