示例;匹配座机号码
一般都是 区号-电话号码 010-12345678
其中区号3位或4位 {3,4}
电话号码 5位到8位 {5,8}
import re
pattern = r'\d{3,4}-[1-9]\d{4,7}$'
s1 = '010-23232332'
o = re.match(pattern,s1) # match方法
print(o)
m = re.search(pattern,s1) # search方法 都行啊
print(m)
print(o.group()) # group方法获取电话号码
现在分组,加上(),pattern改动如下
import re
pattern = r'(\d{3,4})-([1-9]\d{4,7}$)'
s1 = '010-23232332'
o = re.match(pattern,s1)
print(o)
m = re.search(pattern,s1)
print(m)
print(o.group()) # 获取
print(o.groups()) # 放到元组里面了,
#运行结果如下
010-23232332
('010', '23232332') #groups()的作用
若在group()里加上区号,group(1)等等,则获得分组的内容,
用group(1)时,一定要先对pattern分组加括号!
正则表达式注意,输入字符时,一定在英文状态下输入!
匹配网页标签
下面这段代码,匹配两个网页内容,s2是错误的,但也能匹配
import re
pattern = r'<.+><.+>.+</.+></.+>'
s1 ='<html><head>heda部分</head></body>'
s2 ='<html><title>heda部分</head></body>'
o = re.match(pattern,s1)
o2 = re.match(pattern,s2)
print(o,o2,sep='\n')
所以要改进匹配规则,要让标签两头相同。所以考虑到用分组!
pattern = r'<(.+)><(.+)>.+</\2></\1>' # 前面分好组,后面用数字形式取用。
这样就可以把不合规则的过滤掉了
这个方法用数字,来取用。还可以用别名的方式: