正则表达式是一种小型的、高度专业化的编程语言, 它内嵌在python中, 通过re模块来实现.
普通字符:大多数字母和字符都会和自身匹配
元字符:. ^ $ * + ? { } [ ] \ | ( )
常常用来指定一个字符集,如:[abc] [a-z]
元字符在字符集中不起作用:[abc]表示abc和四个字符的任意一个, $在[]中不表示以…结尾
补集匹配不在区间范围内的字符:[^abc]
注:通常情况^匹配行首, 但是在[]中且放在开头位置, 代表”补集匹配”
匹配行首。除非设置MULTILINE标志,它只是匹配字符串的开始。在MULTILINE模式里,它也可以匹配字符串的每个换行。
匹配行尾,行尾被定义为要么是字符串尾, 要么是一个换行字符的任何位置.
反斜杠加不同的字符表示不同的意义; 也可以取消元字符: [ |
\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]
*表示前一个字符重复0次或者多次
+表示前一个字符重复1次或者多次
? 表示前一个字符重复0次或者1次
{n} 表示前一个字符重复n次
{m,n} 重复至少m次, 至多n次
{m,} 重复至少m次, 无上限
{0,} 相当于*
{1,}相当于+
{0,1}相当于?
注意: {m,n} 花括号里面不能出现空格, {m, n}这样有空格错误
贪婪匹配和非贪婪匹配:
>>> import re
>>> s = r'\d{2,4}' #贪婪匹配, 以最大次数4匹配
>>> re.findall(s, '111111111111111')
['1111', '1111', '1111', '111']
>>> s = r'\d{2,4}?' #在重复后面加?则为非贪婪匹配,以最小次数2作为匹配
>>> re.findall(s, '111111111111111')
['11', '11', '11', '11', '11', '11', '11']