2.1 re.compile(pattern[, flags])
2.2 re.findall(pattern, string, flags=0)
2.3 re.finditer(pattern, string, flags=0)
2.4 re.match(pattern, string, flags=0)
2.5 re.serach(pattern, string, flags=0)
2.6 re.split(pattern, string[, maxsplit=0, flags=0])
2.7 re.sub(pattern, repl, string, count=0, flags=0)
1. 正则表达式
- 就其本质而言,正则表达式(或RE)是一种小型的、高度专业化的编程语言,它内嵌再Python中,并通过re模块实现。正则表达式模式被编译成一系列的字节码,然后由C编写的匹配引擎执行。
- 正则表达式用来匹配字符串,用来进行模糊匹配。
- 字符串提供的方法是完全匹配。
- * 、+、?都为贪婪匹配,也就是尽可能匹配,后面加?号使其编程惰性匹配
1.1 正则表达式符号
[ ]可以取消元字符的特殊功能,元字符仅仅为其本身(\ ^ -例外)
正则表达式符号 | 描述 |
'.' | 通配符,默认匹配除'\n'之外的任意一个字符 |
'^' | 匹配字符开头 |
'$' | 匹配字符结尾 |
'*' | 贪婪匹配。匹配前面的子表达式0或多次。例如,zo*能匹配“z”,也能匹配“zo”以及“zoo”。等价于{0, +∞} |
'+' | 匹配前面的子表达式1或多次。例如,“zo+”能匹配“zo”以及“zoo”,但不能匹配“z”等价于{1, +∞} |
'?' | 匹配前面的子表达式0或1次。等价于{0, 1} |
'.*' | 匹配除'\n'之外的任意一个字符0或多次 |
'{m}' | 匹配前一个字符m次 |
'{n, m}' | 贪婪匹配。匹配前一个字符至少n次 |
'{n, m}' | 贪婪匹配。匹配前一个字符n到m次 |
'[abc]' | 匹配所包含的任意一个字符 |
'[a-z]' | 匹配指定范围内的任意字符 |
'[^a-z]' | 匹配任何不在指定范围内的任意字符 |
'|' | 匹配|左或|右的字符 |
a|b | 匹配a或b |
'\' | 反斜杠后边跟元字符去除特殊功能,反斜杠后边跟部分普通字符实现特殊功能 |
'(re)' | 分组匹配,匹配括号内的表达式 |
'\A' | 匹配字符串开始 |
'\b' | 匹配一个单词的边界,也就是指单词和空格间的位置,需加r(原始字符串) |
'\B' | 匹配非单词边界。 |
'\d' | 匹配任何十进制数。等价于[0-9] |
'\D' | 匹配任何非数字字符。等价于[^0-9] |
'\G' | 匹配最后匹配完成的位置 |
'\n' | 匹配一个换行符 |
'\s' | 匹配任何不可见字符。等价于[ \f\n\r\t\v]。 |
'\S' | 匹配任何可见字符。等价于[^ \f\n\r\t\v]。 |
'\t' | 匹配一个制表符 |
'\w' | 匹配不包括下划线的任何字母数字字符或中文。类似但不等价于“[A-Za-z0-9_] |
'\W' | 匹配任何非单词字符。等价于[^A-Za-z0-9_] |
'\z' | 匹配字符串结束 |
'\Z' | 匹配字符串结束。如果存在换行,只匹配到换行前的结束字符串 |
2. re模块
方法 | 描述 |
re.compile(pattern[, flags]) | 用于编译正则表达式,生成一个正则表达式( Pattern )对象,供 match() 和 search() 这两个函数使用。 |
re.findall(pattern, string, flags=0) | 在字符串中找到正则表达式所匹配的所有子串,并返回一个列表。如果没有找到匹配的,则返回空列表 |
re.finditer(pattern, string, flags=0)
| 在字符串中找到正则表达式所匹配的所有子串,并把它们作为一个迭代器返回 |
re.match(pattern, string, flags=0) | 返回只在字符串开始匹配的对象。可以使用group() 或 groups() 匹配对象函数来获取匹配表达式 |
re.serach(pattern, string, flags=0) | 返回匹配到的第一个对象。可以使用group() 或 groups() 匹配对象函数来获取匹配表达式 |
re.split(pattern, string[, maxsplit=0, flags=0]) | 按照能够匹配的子串将字符串分割后返回列表 |
re.sub(pattern, repl, string, count=0, flags=0) | 替换字符串中的匹配项 |
flags参数 | 说明 |
re.l | 使匹配对大小写不敏感 |
re.L | 做本地化识别匹配(locale-aware) |
re.M | 多行匹配,影响^和$ |
re.S | 使.匹配包括换行在内的所有字符 |
re.U | 根据Unicode字符集解析字符。这个标志影响\w,\W,\b,\B |
re.X | 该标志通过给予更灵活的格式以便你将正则表达式写得更容易理解 |
2.1 re.compile(pattern[, flags])
用于编译正则表达式,生成一个正则表达式( Pattern )对象,供 match() 和 search() 这两个函数使用。
>>> import re
>>> a = re.compile('\.com')
>>> a.findall('www.baidu.com')
['.com']
2.2 re.findall(pattern, string, flags=0)
在字符串中找到正则表达式所匹配的所有子串,并返回一个列表。如果没有找到匹配的,则返回空列表
>>> import re
>>> re.findall('.*', 'hello')
['hello', '']
>>> re.findall('www.(\w+).com', 'www.baidu.com')
['baidu']
>>> re.findall('www.(?:\w+).com', 'www.baidu.com')
['www.baidu.com']
>>> re.findall('\\\\', 'abc\de')
['\\']
>>> re.findall(r'\\', 'abc\de')
['\\']
>>> re.findall('<a>(.*?)</a>',li)
['这个是内容', '这个是内容']
>>> li = '<div><ul><li><a>这个是内容</a></闪电></ul><ul><li><a>这个是内容</a></闪电></ul></div>'
>>> re.findall('<a>(.*)</a>',li) #贪婪匹配
['这个是内容</a></闪电></ul><ul><li><a>这个是内容']
>>> re.findall('<a>(.*?)</a>',li) #惰性匹配
['这个是内容', '这个是内容']
2.3 re.finditer(pattern, string, flags=0)
在字符串中找到正则表达式所匹配的所有子串,并把它们作为一个迭代器返回
>>> import re
>>> a = re.finditer('\d', 'adf12345afds')
>>> print(next(a).group())
1
>>> print(next(a).group())
2
>>> print(next(a).group())
3
>>> print(next(a).group())
4
>>> print(next(a).group())
5
2.4 re.match(pattern, string, flags=0)
返回只在字符串开始匹配的对象。可以使用group() 或 groups() 匹配对象函数来获取匹配表达式
>>> import re
>>> html = "<a>这是一个超链接!</a>"
>>> re.match('<(\w+)>.*</(\w+)>',html)
<re.Match object; span=(0, 15), match='<a>这是一个超链接!</a>'>
>>> re.findall('<a>(.*)</a>',html)
['这是一个超链接!']
>>> ret = re.match('<a>(.*)</a>', html) #分组匹配
>>> ret.group()
'<a>这是一个超链接!</a>'
>>> ret.group(1)
'这是一个超链接!'
2.5 re.serach(pattern, string, flags=0)
返回匹配到的第一个对象。可以使用group() 或 groups() 匹配对象函数来获取匹配表达式
>>> import re
>>> ret = re.search('(?P<id>\d{3})/(?P<name>\w{3})', 'weeew34ttt123/ooo')
>>> ret.group()
'123/ooo'
>>> ret.group('id')
'123'
>>> ret.group('name')
'ooo'
2.6 re.split(pattern, string[, maxsplit=0, flags=0])
按照能够匹配的子串将字符串分割后返回列表
>>> import re
>>> re.split('[b]', 'abcdabcdabcd')
['a', 'cda', 'cda', 'cd']
>>> re.split('[bd]', 'abcdabcdabcd')
['a', 'c', 'a', 'c', 'a', 'c', '']
>>> re.split('[ab]', 'abcdabcdabcd')
['', '', 'cd', '', 'cd', '', 'cd']
2.7 re.sub(pattern, repl, string, count=0, flags=0)
替换字符串中的匹配项
>>> import re
>>> re.sub('p.*n', 'world', 'hello,python')
'hello,world'
>>> re.sub('\d', 'abc', 'p1p2p3')
'pabcpabcpabc'