六、正则表达式:分组取值(括号的分组作用和反斜杠1的取值作用)
主要用在匹配带有html标签的文本
限制输入标签的格式(前后必须一致)
使用()和\1,\2取分组的值
# 错误示范,以下当html_str = "<h1>hahaha</h2>"的时候,结果一样会输出
# 没有达到前后一致的限制
import re
html_str = "<h1>hahaha</h1>"
ret = re.match(r"<\w*>.*</\w*>", html_str)
print(ret.group())
# 正确示范,()有分组作用,正则表达式中\1可以取到分组的第一个
import re
html_str = "<h1>hahaha</h1>"
ret = re.match(r"<(\w*)>.*</\1>", html_str)
print(ret.group())
# 正确示范,()有分组作用,正则表达式中\1和\2取值顺序
import re
html_str = "<body><h1>hahaha</h1></body>"
ret = re.match(r"<(\w*)><(\w*)>.*</\2></\1>", html_str)
print(ret.group())
当分组太多时,可以先给分组命名,取值的时候直接按照名字来取:
(?P<name>) #命名的格式 (注意P是大写的)
(?P=name) #取值的格式
import re
html_str = "<body><h1>hahaha</h1></body>"
ret = re.match(r"<(?P<p1>\w*)><(?P<p2>\w*)>.*</(?P=p2)></(?P=p1)>", html_str)
print(ret.group())