正则表达式:匹配或查找符合某些规则的字符串数据,通用性强,适用于很多编程语言
要用正则表达式,需导入re模块,re.match(正则,要匹配的字符串)根据正则表达式从头开始匹配字符串数据,match方法进行匹配,group方法来提取匹配到的数据,正则前加r
单字符匹配:
. 匹配任意一个字符(除了\n)
[ ]匹配[]中列举的字符
\d 数字0~9
\D 非数字
\s 匹配空白:空格,tab键
\S 非空白
\w 非特殊字符,即a~z,A~Z,0~9,_,汉字
\W 特殊字符 非字母,非数字,非汉字
匹配多个字符的格式:
*匹配前一个字符0次或无限次,可有可无
+ 一次或无限次
?一次或0次
{m} 前一个字符出现m次
{m,n} 前一个字符出现m到n次
匹配开头和结尾的正则表达式:
^ 匹配字符串开头 (“^\d.*\d&”,”3s2”)匹配以数字开头以数字结尾,中间不限
$ 匹配字符串结尾
[^指定字符]除指定字符外都匹配 (”[^abc]”,”d”)
匹配分组:
| 匹配左右任意一个表达式
(ab) 将括号中字符作为一个分组
\num 引用第num个分组匹配到字符串
(?P<name>) 分组起别名,可以将前面用到的匹配规则起名,然后后面直接用
(?P=name) 引用别名为name分组匹配到的字符串
re模块的高级用法:
re.search(pattern,str) 根据正则表达式查找数据,只查找一次
re.findall(pattern,str)查找出全部匹配项
re.sub(pattern,reply,str,count=1) 将匹配到的数据进行替换,count为替换次数,默认为全部替换
re.split(pattern,str, maxsplit=1)根据匹配进行切割字符串,并返回一个列表,maxsplit为分割次数,默认全部分割
Python贪婪和非贪婪:
Python里的数量词默认是贪婪的,总是尝试匹配尽可能多的字符;
非贪婪:匹配尽可能少的字符
贪婪转为非贪婪:在* , ? + {m,n}后加上?
Python中正则表达式匹配数据时字符串前面加上r表示原生字符串,数据里面的反斜杠不需要手动进行转义,r只针对反斜杠起作用,re.match(r”c:\\a”,”c:\\a\\b")