简识正则表达式
什么是正则表达式?用一个规则去匹配你想要的的信息。
正则表达式:使用来处理文本的,将一组类似的字符串进行抽象,形成的文本模式字符串。
match:检测字符串是否匹配正则表达式
search:在一个长的字符串中搜索匹配正则表达式的子字符串
findall:查找字符串
sub和subn:搜索和替换
split:通过正则表达式指定分隔符,通过这个分隔符将字符串拆分
元字符:特殊符号和字符,正是它给予正则表示枪的功能和灵活性。

__author__ = 'Administrator' import re res1=re.match(r"爱情公寓1","爱情公寓1") print(res1.group()) # 报错 # res2=re.match(r"爱情公寓1","爱情公寓2") # res2.group() res3=re.match(r"爱情公寓\d","爱情公寓9") print(res3.group()) res4=re.match(r"爱情公寓\d","爱情公寓88888888885") print(res4.group()) res5=re.match(r"爱情公寓[123456789]","爱情公寓7") print(res5.group()) res6=re.match(r"爱情公寓[1-9]","爱情公寓6") print(res6.group()) res7=re.match(r"爱情公寓[1234789]","爱情公寓3") print(res7.group()) res8=re.match(r"爱情公寓[1-347-9]","爱情公寓3") print(res8.group()) res9=re.match(r"[hH]ello","hello,world") print(res9.group()) res10=re.match(r"[hH]ello","Hello,world") print(res10.group()) res10=re.match(r"[hH]ello","Hello,world") res11=re.match(r"爱情公寓[1-9a-z]","爱情公寓z") print(res11.group()) res11=re.match(r"爱情公寓[1-9a-zA-Z]","爱情公寓B") print(res11.group()) res12=re.match(r"爱情公寓\w","爱情公寓a") print(res12.group()) res12=re.match(r"爱情公寓\w","爱情公寓C") print(res12.group()) res13=re.match(r"爱情公寓\s\d","爱情公寓\t8") print(res13.group()) # .相当于Linux里面的*,一个.匹配任意一个字符 res14=re.match(r"爱情公寓.","爱情公寓哈哈哈") print(res14.group()) res15=re.match(r"爱情公寓.","爱情公寓AZ89") print(res15.group()) ##################################### 爱情公寓1 爱情公寓9 爱情公寓8 爱情公寓7 爱情公寓6 爱情公寓3 爱情公寓3 hello Hello 爱情公寓z 爱情公寓B 爱情公寓a 爱情公寓C 爱情公寓 8 爱情公寓哈 爱情公寓A
限定符:


__author__ = 'Administrator' import re res1=re.match(r"爱情公寓\d\d","爱情公寓111") print("1."+res1.group()) # 报错 # res2=re.match(r"爱情公寓\d\d","爱情公寓1") # print(res2.group()) res3=re.match(r"爱情公寓\d{1,2}","爱情公寓1") print("3."+res3.group()) res4=re.match(r"爱情公寓\d{1,2}","爱情公寓2") print("4."+res4.group()) res5=re.match(r"爱情公寓\d{1,2}","爱情公寓12") print("5."+res5.group()) res6=re.match(r"爱情公寓\d{1,3}","爱情公寓12") print("6."+res6.group()) res7=re.match(r"爱情公寓\d{1,3}","爱情公寓1234") print("7."+res7.group()) res8=re.match(r"爱情公寓\d{1,3}","爱情公寓12") print("8."+res8.group()) res9=re.match(r"\d{11}","12345678901").group() print("9."+res9) # 报错 # res10=re.match(r"\d{11}","1234567890").group() # print("10."+res10) # 报错 # res11=re.match(r"\d{11}","1234567890A").group() # print("11."+res11) res12=re.match(r"021-\d{8}","021-12345678").group() print("12."+res12) res13=re.match(r"021-?\d{8}","021-12345678").group() print("13."+res13) res14=re.match(r"021-?\d{8}","021-12345678").group() print("14."+res14) res15=re.match(r"\d{2,4}-?\d{7,8}","021-12345678").group() print("15."+res15) ########################## 1.爱情公寓11 3.爱情公寓1 4.爱情公寓2 5.爱情公寓12 6.爱情公寓12 7.爱情公寓123 8.爱情公寓12 9.12345678901 12.021-12345678 13.021-12345678 14.021-12345678 15.021-12345678
__author__ = 'Administrator' import re def main(): names=["age","_age","name","1name","!age"] for name in names: res=re.match(r"[a-zA-Z_][a-zA-Z0-9_]*$",name) if res: print("变量名:%s 符合要求,匹配出来的是:%s" %(name,res.group())) else: print("变量名:%s 不符合要求" %(name)) if __name__ == '__main__': main() ####################### 变量名:age 符合要求,匹配出来的是:age 变量名:_age 符合要求,匹配出来的是:_age 变量名:name 符合要求,匹配出来的是:name 变量名:1name 不符合要求 变量名:!age 不符合要求
import re # 6到8个字符,可使用字母、数字、下划线,需以字母开头,@163.com、@126.com,@yeah.com def main(): while True: emails=input("请输入邮箱地址:") res=re.match(r"[A-Za-z]\w{5,7}@(163|126|yeah)\.com$",emails) if res: print("%s是符合规定的,匹配出来的是:%s" %(emails,res.group())) else: print("不合法") if __name__ == '__main__': main() ############################ 请输入邮箱地址:ZCQPCY1@163.com ZCQPCY1@163.com是符合规定的,匹配出来的是:ZCQPCY1@163.com 请输入邮箱地址:

html_str6 = "<body><h1>hahahah</h1></body>" ret8=re.match(r"<(?P<p1>\w*)><(?P<p2>\w*)>.*</(?P=p2)></(?P=p1)>", html_str6) print(ret8.group(1)) print(ret8.group(2)) ############################ body h1
【注意】要显示匹配一个句点或者句号本身,必须使用反斜线转义句点符号的功能,例如:"\.",匹配\A——A;
如果是想要逐字匹配字符字符中的任一一个或者是全部,就必须使用反斜线进行转义;
\b和\B匹配字符边界:
\b匹配一个单词的边界;
\B搜索出现在一个单词中间的模式
__author__ = 'Administrator' import re ret=re.search(r"^the","the world") print(ret.group()) # 匹配任何以the开始的字符串 ret1=re.match(r"\bthe","the world") print(ret1.group()) # ret2=re.search(r"the\b"," man the i love ") print(ret2.group()) ret3=re.search(r"\Bthe","ilovetheworld") print(ret3.group()) ret4=re.search(r"the","ilovetheworld") print(ret4.group()) ret5=re.search(r"world$","ilovetheworld") print(ret5.group()) ############################### the the the the the world
html_str1 = "<h1>hahahah</h1>" ret1=re.match(r"<\w*>.*</\w*>", html_str1) print(ret1.group()) ret2=re.match(r"<\w*>.*</\w*>", html_str1) print(ret2.group()) html_str2 = "<h1>hahahah</h2>" ret3=re.match(r"<\w*>.*</\w*>", html_str2) print(ret3.group()) try: ret4=re.match(r"<(\w*)>.*</\1>", html_str2) print(ret4.group()) except: print("我是ret4:我有点点问题,快来拯救我") html_str3 = "<h1>hahahah</h1>" ret5=re.match(r"<(\w*)>.*</\1>", html_str3) print("我是ret5:"+ret5.group()) html_str6 = "<body><h1>hahahah</h1></body>" try: ret6=re.match(r"<(\w*)><(\w*)>.*</\1></\2>", html_str6) print(ret6.group()) except: print("我是ret6:我有点点问题,快来拯救我") ret7=re.match(r"<(\w*)><(\w*)>.*</\2></\1>", html_str6) print(ret7.group()) ret8=re.match(r"<(?P<p1>\w*)><(?P<p2>\w*)>.*</(?P=p2)></(?P=p1)>", html_str6) print(ret8.group()) html_str7= "<body><h1>hahahah</body></h1>" ret9=re.match(r"<(\w*)><(\w*)>.*<(/\1)></\2>",html_str7) print(ret9.group()) ######################## <h1>hahahah</h1> <h1>hahahah</h1> <h1>hahahah</h2> 我是ret4:我有点点问题,快来拯救我 我是ret5:<h1>hahahah</h1> 我是ret6:我有点点问题,快来拯救我 <body><h1>hahahah</h1></body> <body><h1>hahahah</h1></body> <body><h1>hahahah</body></h1>

搜索
search、findall、sub
search和match:
search是在给指定的字符串当中去搜索符合的正则表达式的内容;
match就是从左到右的完整的去匹配,多出来的不报错,少了则报错;
但是两者的语法都一样,re(r"正则表达式","指定的字符串")。
比如在一篇微信公众号文章中中,匹配阅读人数:
res=re.search(r"\d+","阅读人数:1289")
findall
比如查找多个数字:
res=re.findall(r"\d+","文章有12893647个字,阅读人数为3657,章节为120")
print(res)
["12893647","3657","120"]
findall返回的帝乡是list类型的,支持list的所有操作,如果没有找到匹配的部分,就返回一个空列表。
sub
将匹配到的数据进行替换;
re.sub(pattern,replacement,"string")
pattern——正则表达式
replacement——替换成什么(可以是字符串,也可以是函数,函数返回的一个用来替换的字符串)
string——要被替换的字符串
比如把python开发工程师的工资换成20000;
res=re.sub(r"\d+","20000","python_salary=15000")
import re def replace(res): result=int(res.group())+5000 return str(result) res=re.sub(r"\d+",replace,"python_salary=15000") print(res) ######################### python_salary=20000
split 根据匹配进行切割字符串,并返回一个列表

浙公网安备 33010602011771号