一、re简介
正则表达式是一种对字符串(包括普通字符、非打印字符、通用字符(称为“原子”)、特殊字符(称为“元字符”))操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。
正则表达式是一种文本模式,该模式描述在搜索文本时要匹配的一个或多个字符串。
二、“原子”讲解
### 普通字符作为原子
普通字符就是指普通的字符,比如A-Z, a-z, 0-9。
1 #导入re模块
2 import re
3 string = "abcd123456ABC"
4 pat = "abc"
5 ret = re.search(pat, string)
6 print(ret)
7 <re.Match object; span=(0, 3), match='abc'>
### 非打印字符作为原子
非打印字符指在计算机中有一些字符是确确实实存在,但是它们不能够显示或者打印出来。
比如:1、ASCII码表为例,ascii码值在0-31的为控制字符,无法显示和打印
2、/t /n 等一些转义字符
1 #导入re模块
2 import re
3 string = '''abcd12
4 3456ABC'''
5 pat = "\n"
6 ret = re.search(pat, string)
7 print(ret)
8 <re.Match object; span=(6, 7), match='\n'>
### 通用字符作为原子
1 '''
2 \w 匹配的是任意字母、数字、下划线,类似但不等价于“[A-Za-z0-9_]”,这里的"单词"字符使用Unicode字符集。
3 \W 除匹配的是任意字母、数字、下划线,等价于“[^A-Za-z0-9_]”。
4 \d 匹配的是数字,等价于[0-9]。
5 \D 除匹配的是数字,等价于[^0-9]。
6 \s 匹配任何不可见字符,包括空格、制表符、换页符等等。等价于[ \f\n\r\t\v]。
7 \S 匹配任何可见字符。等价于[^ \f\n\r\t\v]。
8
9 '''
###原子表 ==> [ 任意字符 ]
1 #导入re模块
2 import re
3 string = '''abcd123456ABC'''
4 pat = "abc[abcde]" #在[]中的任意字符选出一个存在匹配的值,如没有则返回None
5 ret1 = re.search(pat, string)
6 pat = "abc[^abc]"
7 ret2 = re.search(pat, string)
8 print(ret1)
9 print(ret2)
10 <re.Match object; span=(0, 4), match='abcd'>
11 <re.Match object; span=(0, 4), match='abcd'>
12 [Finished in 0.1s]
三、元字符
特殊字符
1 ^ #匹配输入字行首。
2 $ #匹配输入字行尾。
3 \ # 转义字符
4 {n} #n次
5 {n,} #至少n次
6 {n,m}#至少n次,至多n次
7 . #匹配除\n的任意字符
8 * #匹配前一个字符0/多次
9 + #匹配前一个字符1/多次
10 ? #匹配一个字符0/1
11 | #或。匹配|左右表达式任意一个,从左到右匹配,如果|没有包括在()中,则它的范围是整个正则表达式