1.正则表达式
1.1作用
正则表达式是用来匹配或描述字符串的工具
1.判断输入的字符串是否符合要求,如是否是邮箱/手机号码
2.提取满足条件的内容
3.字符串替换
1.2 re模块
python中通过re模块中相应的方法来支持正则表达式的匹配、查找何替换功能from re import fullmatch
fullmatch(正则表达式,字符串)--->判断正则表达式和字符串是否完全匹配
正则表达式字符串:就是一个字符串,字符串中是正则表达式语法
正则表达式中包含2个部分:一个是正则表达式对应的字符,一个是普通字符
r = r"\wdk"
print(fullmatch(r,"1dk"))
re.fullmatch(re_str,str),完全匹配,不完全匹配时返回None
1.3正则表达式语法
用r阻止转义
. :匹配一个任意字符 r"a.b"
\w:匹配一个字母数字下划线,r"a\wb" acb,a_b,a9b
\W:匹配非字母数字下划线
\s:匹配一个不可见字符,空格,制表符,回车
\S:匹配非空白字符
\d:匹配一个数字字符
\D:匹配非数字字符
\b:检查\b出现的位置是否是一个单词边界,只是检查,不代表字符,\b左右不是单词边界就是None.如ab\bds。是单词边界:ab\b ds
\B:检查是否不是单词边界
单词边界:字符串开始结束,空格,换行,标点符号,把2个单词隔开的字符就是单词边界
^:检查字符串开头
$:检查字符串结尾
[字符集]:匹配一个字符,这个字符是中括号中的任意一个字符:r"[abc]abc" aabc,babc,cabc
[字符1-字符2]匹配一个字符,这个字符的Unicode编码值中字符1和2之间
字符1的unicode比字符2 的小。
[1-3]ab 1ab 2 ab 3ab
中文Unicode范围:4E00-9FA5
"-”不放在2个字符之间就是“-” r"sdk-"
[^字符集]:匹配一个不再字符集中的任意字符
注意:^必须放在中括号最前面才有效
1.4次数相关符号
* :匹配0次或多次,*前要有一个字符。\d*kkdj
+:匹配一次或多次,前面要有一个字符,\d+kdj
?:匹配一次或0次。 a?123
{N}:匹配N次 \w{10}
{M,N}:匹配M到N次
{M,}:至少匹配M次
{,N}:最多匹配N次
1.5分支和分组
分支:条件一|条件二--->先用条件一去匹配,如果失败,就用条件二。
abc(ab|dh|sjf)
()分组:
a.组合:将括号中的内容作为一个整体进行操作
b.捕获:使用带括号的正则表达式匹配成功后,只获得括号中的内容
c.重复:在正则表达式中可以通过\数字n来重复前面第n个()中匹配到的结果
import re
r = r"(a)-(b)(c)(\1\2)23"
print(re.fullmatch(r,"a-bcab23"))
转义字符:
正则表达式可以在特殊符号前加\,来让特殊的符号没有意义
注意在中括号中不用转义,就表示该符号,例外的是 “\”和“-”,要用\,-转义
import re
r = r"[3\-5\\]"
print(re.fullmatch(r,"-"))
print(re.fullmatch(r,"\\"))
print(re.fullmatch(r,"3"))
1.6 re模块中的函数
** compile(正则表达式字符串):** 将正则表达式字符串转换成正则表达式对象
fullmatch(正则表达式字符串,字符串):用正则表达式去完全匹配整个字符串,返回匹配对象;
match()
span ()获取匹配成功的下标(4,9)4开始,有4,没有9。
print(result.span())
group()获取完全匹配的匹配结果
group(index>0)获取正则表达式中第index个分组匹配到的结果
`print(result.group())
string:获取被匹配到的原字符串
search(正则表达式,字符串):查找字符串中满足正则表达式的第一个字符,返回第一个匹配结果,或者None
findall(正则表达式,字符串)--->获取字符串中满足正则表达式的所有子串。如过正则表达式中有分组,取值的时候只取分组中匹配到的结果 ,如果有多个分组,会将每个分组作为一个元祖的元素
import re
r = r"(\d)k(\d)"
s1 = "2k1j32j3k5j5"
print(re.findall(r,s1))
#[('2', '1'), ('3', '5')]
finditer(正则表达式,字符串):查找所有满足正则条件的子串,返回的是迭代器,迭代器中的元素是匹配对象
split(正则表达式,字符串): 将字符串按照满足正则表达式的子串进行分割
sub(正则表达式,repl ,字符串): 将字符串中满足正则表达式的子串替换成repl
.+?:用尽可能少.的匹配