正则表达式又称为规则表达式,是对字符串操作的一种逻辑公式。通过正则表达式,从字符串中可以获取我们想要获取的特定部分。在正则表达式中需要导入re模块。对正则表达式的理解,可以从search和match来入手。
匹配规则如下:
r"r[A-Z]n"r"r[a-z]n"r"r[0-9]n"r"r[0-9a-z]n"
除了自己定义规则, 还有很多匹配的规则时提前就给你定义好了的. 下面有一些特殊的匹配类型给大家先总结一下。
类型匹配
\d : 任何数字\D : 不是数字\s : 任何 white space, 如 [\t\n\r\f\v]\S : 不是 white space\w : 任何大小写字母, 数字和 “” [a-zA-Z0-9]\W : 不是 \w\b : 空白字符 (只在某个字的开头或结尾)\B : 空白字符 (不在某个字的开头或结尾)\\ : 匹配 \. : 匹配任何字符 (除了 \n)^ : 匹配开头$ : 匹配结尾? : 前面的字符可有可无
重复匹配
* : 重复零次或多次+ : 重复一次或多次{n, m} : 重复 n 至 m 次{n} : 重复 n 次
例子:
print(re.search(r"ab*", "a")) # <_sre.SRE_Match object; span=(0, 1), match='a'>print(re.search(r"ab*", "abbbbb")) # <_sre.SRE_Match object; span=(0, 6), match='abbbbb'> Python学习交流群:1004391443 # + : occur 1 or more timesprint(re.search(r"ab+", "a")) # Noneprint(re.search(r"ab+", "abbbbb")) # <_sre.SRE_Match object; span=(0, 6), match='abbbbb'> # {n, m} : occur n to m timesprint(re.search(r"ab{2,10}", "a")) # Noneprint(re.search(r"ab{2,10}", "abbbbb")) # <_sre.SRE_Match object; span=(0, 6), match='abbbbb'>
import repattern1="cat"pattern2="brid"string="dog runs to cat"print(re.search(pattern1,string))print(re.search(pattern2,string))ptn=r"r[au]n"print(re.search(ptn,"dog runs to cat")) #<_sre.SRE_Match object; span=(12, 15), match='cat'>#None#<_sre.SRE_Match object; span=(4, 7), match='run'>
一般搜索从行开头开始,但我们想从其他的每一行进行,加上flags=re.M参数,对每一行进行处理。
string="""dog runs to catI run to dog."""print(re.search(r"^I",string))print(re.search(r"^I",string,flags=re.M)) #re.M是re.MULTILINE 这个参数可以对每一行进行处理#None#<_sre.SRE_Match object; span=(17, 18), match='I'>
分组
match=re.search(r"(\d+),Date:(.+)","stu:4322321,Date:Jun/22/2019")print(match.group()) print(match.group(1)) print(match.group(2)) #4322321,Date:Jun/22/2019#4322321#Jun/22/2019
有时候组会很多,可以在括号开头写上 ?P<名字> 这样的形式给组定义个名字
match=re.search(r"(?P<stu>\d+),Date:(?P<date>.+)","stu:4322321,Date:Jun/22/2019")print(match.group("stu"))print(match.group("date")) #4322321#Jun/22/2019
findall
findall查找全部列表
print(re.findall(r"c[ua]n","cun can catch"))#这里的|是or的意思print(re.findall(r"cun|can","cun can catch"))#['cun', 'can']#['cun', 'can']
replace
匹配掉一些字符串
print(re.sub(r"r[au]ns","catches","dog runs to cat")) #dog catches to cat
split
分割功能,生成一个列表保存所有单词
print(re.split(r"[,;\.]","a;b,c.d;e")) #['a', 'b', 'c', 'd', 'e']
下图列出了Python支持的正则表达式元字符和语法: