上一篇文章為:→5.1.6表示邊界
匹配分組
字符 | 功能 | |
---|---|---|
匹配左右任意一個(gè)表達(dá)式 | ||
(ab) | 將括號(hào)中字符作為一個(gè)分組 | |
\num |
引用分組num匹配到的字符串 | |
(?P<name>) |
分組起別名 | |
(?P=name) | 引用別名為name分組匹配到的字符串 |
示例1:|
需求:匹配出0-100之間的數(shù)字
#coding=utf-8
import re
ret = re.match("[1-9]?\d","8")
ret.group()
ret = re.match("[1-9]?\d","78")
ret.group()
# 不正確的情況
ret = re.match("[1-9]?\d","08")
ret.group()
# 修正之后的
ret = re.match("[1-9]?\d$","08")
ret.group()
# 添加|
ret = re.match("[1-9]?\d$|100","8")
ret.group()
ret = re.match("[1-9]?\d$|100","78")
ret.group()
ret = re.match("[1-9]?\d$|100","08")
ret.group()
ret = re.match("[1-9]?\d$|100","100")
ret.group()
運(yùn)行結(jié)果:
示例2:( )
需求:匹配出163、126臼寄、qq郵箱之間的數(shù)字
#coding=utf-8
import re
ret = re.match("\w{4,20}@163\.com", "test@163.com")
ret.group()
ret = re.match("\w{4,20}@(163|126|qq)\.com", "test@126.com")
ret.group()
ret = re.match("\w{4,20}@(163|126|qq)\.com", "test@qq.com")
ret.group()
ret = re.match("\w{4,20}@(163|126|qq)\.com", "test@gmail.com")
ret.group()
運(yùn)行結(jié)果:
練習(xí):
>>> ret = re.match("([^-]*)-(\d+)","010-12345678")
>>> ret.group()
'010-12345678'
>>> ret.group(1)
'010'
>>> ret.group(2)
'12345678'
示例3:\
需求:匹配出<html>hh</html>
#coding=utf-8
import re
# 能夠完成對(duì)正確的字符串的匹配
ret = re.match("<[a-zA-Z]*>\w*</[a-zA-Z]*>", "<html>hh</html>")
ret.group()
# 如果遇到非正常的html格式字符串,匹配出錯(cuò)
ret = re.match("<[a-zA-Z]*>\w*</[a-zA-Z]*>", "<html>hh</htmlbalabala>")
ret.group()
# 正確的理解思路:如果在第一對(duì)<>中是什么卸察,按理說在后面的那對(duì)<>中就應(yīng)該是什么
# 通過引用分組中匹配到的數(shù)據(jù)即可脯厨,但是要注意是元字符串,即類似 r""這種格式
ret = re.match(r"<([a-zA-Z]*)>\w*</\1>", "<html>hh</html>")
ret.group()
# 因?yàn)?對(duì)<>中的數(shù)據(jù)不一致坑质,所以沒有匹配出來
ret = re.match(r"<([a-zA-Z]*)>\w*</\1>", "<html>hh</htmlbalabala>")
ret.group()
運(yùn)行結(jié)果:
示例4:\number
需求:匹配出<html><h1>www.itcast.cn</h1></html>
#coding=utf-8
import re
ret = re.match(r"<(\w*)><(\w*)>.*</\2></\1>", "<html><h1>www.itcast.cn</h1></html>")
ret.group()
ret = re.match(r"<(\w*)><(\w*)>.*</\2></\1>", "<html><h1>www.itcast.cn</h2></html>")
ret.group()
運(yùn)行結(jié)果:
示例5:(?P<name>)
(?P=name)
需求:匹配出<html><h1>www.itcast.cn</h1></html>
#coding=utf-8
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()
ret = re.match(r"<(?P<name1>\w*)><(?P<name2>\w*)>.*</(?P=name2)></(?P=name1)>", "<html><h1>www.itcast.cn</h2></html>")
ret.group()
注意:(?P<name>)
和(?P=name)
中的字母p大寫
運(yùn)行結(jié)果: