组成:字符+操作符
常用操作符:
| 操作符 | 说明 | 实例 | ||
|---|---|---|---|---|
| . | 表示任何单个字符 | |||
| [] | 字符集,对单个字符给出取值范围 | [abc]表示a或b或c,[a-z]表示a到z任意单个字符 | ||
| [^] | 非字符,给出排除范围 | [^abc]表示非a或b或c的单个字符 | ||
| * | 前一个字符0次或无限次扩展 | abc*表示ab,abc,abcc等 | ||
| + | 前一个字符1次或无限次扩展 | abc+表示abc、abcc\abccc等 | ||
| ? | 前一个字符0次或一次扩展 | abc?表示ab、abc | ||
| \ | 左右表达式任取一个 | abc\ | def表示abc或def | |
| {m} | 扩展前一个字符m次 | ab{2}c表示abbc | ||
| {m,n} | 扩展前一个字符m至n次 | ab{1,2}c表示abc、abbc | ||
| ^ | 匹配字符串的开头 | ^abc表示abc且在一个字符的开头 | ||
| $ | 匹配字符串的结尾 | abc$表示abc且在一个字符串的结尾 | ||
| () | 分组标记,内部只能使用\ | 操作符 | (abc)表示abc,(abc\ | def)表示abc或def |
| \d | 数字,等价于[0-9] | |||
| \w | 单词字符,等价于[A-Za-z0-9] |
实例
| 正则表达式 | 对应字符 |
|---|---|
| ^[A-Za-z]+$ | 由26个字母组成的字符串 |
| ^[A-Za-z0-9]+$ | 由字母或数字组成的字符串 |
| ^-?\d+$ | 整数形式字符串 |
| ^[0-9]*[1-9][0-9]*$ | 正整数形式的字符串 |
| [1-9]\d{5} | 邮政编码,6位 |
| \u4e00-\u9fa5 | 匹配中文字符 |
| d{3}-\d{8} | 电话号码 |
匹配ip地址的正则表达式:
ip地址分4段,每段0-255
0-255可再分位4段:
0-99:[1-9]?\d
100-199:1\d{2}
200-249:2[0-4]\d
250-255:25[0-5]
(([1-9]?\d|1\d{2}|2[0-4]\d|25[0-5]).){3}([1-9]?\d|1\d{2}|2[0-4]\d|25[0-5])
re库的使用
正则表达式的表示类型:
raw string(原生字符串)r’text’:不包含转义符的表达式
常用功能函数:
| 函数 | 说明 |
|---|---|
| re.search() | 在一个字符串中搜索正则表达式的第一个位置,返回match对象 |
| re.match | 从一个字符串的开始位置起 |
| re.findall() | 搜索字符串,以列表类型返回全部匹配的字符 |
| re.split() | 将字符串按正则表达式匹配结果进行分割,返回list |
| re.sub() | 在一个字符串中替换所有匹配正则表达式的子串,返回替换后的字符串 |
re.search(pattern,string,flags=0)
pattern:正则表达式的字符串
string待匹配的字符串
flags:
- re.I:忽略大小写
- re.M:^可以将给定字符串的每行当作匹配开始
- re.S:’.’可以匹配所有字符,如果不加re.S不匹配换行符
re.match(pattern,string,flags=0):
如果在开头没有匹配到则返回空
re.findall():返回所有符合条件的结果组成一个list
re.split(pattern,string,maxsplit=0,flags=0)
- maxsplit:最大分割数,剩余部分作为最后一个元素输出
1 | >>>re.split(r'[1-9]\d{5}','BIT100081 TSU100084') |
re.sub(pattern,repl,string,count=0,flags=0)
在一个字符串中替换所有匹配正则表达式的字串,返回替换后的字符串
- repl:替换匹配到字符串的字符串
- count:最大替换次数
1 | >>>re.sub(r'[1-9]\d{5}',':zipcode','BIT100081 TSU100084') |
等价用法:
1 | ##函数式用法:一次性操作 |
re.comple:可以将正则表达式表示编译为正则表达式对象(可以重复使用)
贪婪和最小匹配
默认贪婪匹配
如果希望进行最小匹配,需要对操作符进行扩展(加?)
| 操作符 | 说明 |
|---|---|
| *? | 前一个字符0次或无限次扩展,最小匹配 |
| +? | 前一个字符1次或无限次扩展,最小匹配 |
| ?? | 前一个字符0次或1次扩展,最小匹配 |
| {m,n}? | 扩展前一个字符m至n次(含n),最小匹配 |