正则表达式是由普通字符(例如字符a 到z)以及特殊字符(称为"元字符")组成的文字模式。 模式描述在搜索文本时要匹配的一个或多个字符串。 正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配
匹配单个字符
字符功能.匹配任意一个字符(除了“\n”)[]匹配列表[]给出的字符\d匹配数字一个,即0-9\D匹配非数字\s匹配空格,\t-tab键 \n-换⾏\S匹配非空格\w匹配字符匹配单词字符,即a-z、A-Z、0-9、_\W匹配⾮单词字符 匹配多字符串 字符功能*匹配前一个字符出现0次或是无限次,即可有可无+匹配前一个字符串出现1次或是无限次,即至少有1次?匹配前一个字符串出现1次或者0词,要么1次,要么没有{m}匹配前一个字符出现m次{m,n}匹配前一个字符出现从m到n次 匹配分组“|” 字符功能|匹配左右任意一个表达式(ab)将括号中\num引用分组num匹配到的一个分组(?P)分组起别名(?P=name)应用别名为name分组匹配到字符串 这里() 跟\num 是连用的,()用做分作分组,\num 大概是调用分组的索引,的内容,可以理解为分组减少重复(意淫一下:如果分组很复杂,用这个方法估计你得疯了)所一用(?P)分组起别名,之后再需要用时候(?P = name)这方法就人性了很多match() 方法一旦匹配成功,就是一个对象,对象有一下方法: group() 返回被 RE 匹配的字符串 start() 返回匹配开始的位置 end() 返回匹配结束的位置 span() 返回⼀个元组包含匹配 (开始,结束) 的位置
import re result = re.match(正则表达式,要匹配的字符串) result.group()举例子1:需求:匹配出163、126、11邮箱
import re ret = re.match("\w{4,20}@163|126|qq\.com","test@163.com") print(ret.group()) if ret: print(ret.group()) else: print("不是163、126、qq邮箱")需求:匹配出hh
import re ret = re.match("<[A-Za-z]*>/w*<[A-Za-z]>","<html>hh</html>") print(ret.group())需求:匹配出 <html><h1>www.itcast.cn</h1></html>
import re labels = [<html><h1>www.itcast.cn</h1></html>,<html><h2>www.itcast.cn</h2></html>] for label in labels: ret = re.match(r"<(\w*)><(\w*)>.*</\2></\1>") if ret : print("%s 就是符合要求的标签" % ret.group()) else: print("%s 不符合要求" % label)示例:(?P<name>) (?P=name) 需求:匹配出<html><h1>www.itcast.cn</h1></html>
import re ret = re.match(r"<(?p<name1>\w*)><(?P<name2>/w*)>.*<(?P=name2)><(?P=name1)>","<html><h1>www.itcast.cn</h1></html>") ret.group()