单字符匹配:
[] :匹配 []中包含的单个字符
\d :匹配数字字符 相当于[0-9]
\D : 除了\d以外所有字符
\s : 匹配所有的空白字符 例如:\t \n 空格等
\S :除了\s以外所有字符
\w :匹配数字、字母、下划线、中文 相当于[0-9a-zA-Z_]
\W :除了\w以外所有字符
. : 匹配除换行符以外所有字符
数量修饰:
{n} :匹配n次
{n,} :匹配至少n次, 能多匹配就多匹配(默认贪婪)
{n,m} : 匹配至少n次,最多m次
{0,} :匹配任意多次 同*
{1,} :匹配至少1次 同+
{0,1} :可有可无 同?
贪婪模式/非贪婪模式:
贪婪模式:尽可能多的匹配字符
非贪婪模式:尽可能少的匹配字符
常用:
.* :匹配除\n以外所有字符
.*? :取消贪婪
.+ : 匹配至少一个
.+? : 取消贪婪
边界修饰:
^ : 以xxx开头
$ : 以xxx结尾
分组 ():
- 视为一个整体
- 子模式
1)命名法:
(?P<goudan>正则表达式) 使用 (?P=goudan)匹配分组
2)直接使用数字:
(正则表达式) 使用 \1 \2 或 $1 $2 匹配分组(分别代表第一个小括号匹配到的内容和第二个小括号匹配到的内容)
匹配模式:
- re.I 忽略大小写
- re.L 表示特殊字符集\w,\W,\b,\B,\s,\S
- re.M 表示多行模式
- re.S 包括换行符在内的任意字符
- re.U 表示特殊字符集\w,\W,\b,\B,\d,\D,\s,\D
- re.DOTALL 使(.)匹配包括换行符在内的任意字符
函数:
import re
re.compile('正则表达式') # 匹配符合正则的内容
# 匹配
re.match() # 从字符串的开头开始匹配,如果匹配成功,返回一个对象,否则返回None
re.search() # 从字符串的任意位置开始匹配,如果匹配成功,直接返回
re.findall() # 匹配所有,返回一个列表, 列表里面就是匹配的内容
# 正则替换
re.sub() # 参数1是要替换掉的字符,参数2是要替换成的字符,参数3是需要替换的字符集
re.subn() # 参数同re.sub,返回结果在re.sub()基础上增加了返回替换的次数
# 获取数据 其中ret为返回对象
ret.group() # 得到匹配结果(整个正则匹配的内容)
ret.span() # 得到匹配结果的位置
# 获取分组数据
ret.group(1) # 第一个子模式匹配到的内容
ret.group(2) # 第二个子模式匹配到的内容
ret.findall() # 如果想要整个正则匹配的内容,需要将整个正则用小括号括起来
示例:
- 匹配url:((ht|f)tp(s?)\:\/\/[0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*(:(0-9)*)*(\/?)([a-zA-Z0-9\-\.\?\,\/\\\+&%\$#_]*)?)