match进行匹配
import re
# match方法进行匹配,从头开始匹配。match这个函数如果成功匹配,返回的就是一个对象,如果匹配不到数据,返回的就是None
result = re.match('python','python is good')
print(result)
# group这个方法用来提取匹配到的数据
print(result.group())
注意点:
1、match从头匹配
字符
.单个任意字符
result = re.match('.','bcd')
print(result.group())
[]匹配列举字符中的任何一位
result = re.match('[pP]','Python')
print(result.group())
\d 匹配数字
# re1 = re.match('[0123456789]','123python')
# re1 = re.match('[0-9]','923python')
re1 = re.match('\d','923python')
\D 匹配的是非数字
re1 = re.match('\D','@923python')
\w 匹配的是a-z A-Z 0-9 _
re1 = re.match('[a-zA-Z_0-9]','123_aASD923python')
re1 = re.match('\w','asd_123_aASD923python')
\W 匹配的非单词字符
匹配指定的字符个数
* 代表的是可有可无,代表的是0次或者无数次
str1 = 'Qwe'
re1 = re.match('[A-Z][a-z]*',str1)
+ 代表的是至少有一位
# 匹配变量名是否生效
str1 = '_name123_asd'
re1 =re.match('[a-zA-Z_]+[\w]*',str1)
写在?前面匹配的字符出现一次或者0次
#匹配0-99之间的数字
re1 = re.match('[1-9]?[0-9]','988')
{}的匹配具体的位数
类型 | 说明 |
---|---|
{m} | 匹配一个字符出现m次 |
{m,} | 匹配的是一个字符至少出现m次 |
{m,n} | 匹配字符出现的次数从m次到n次 |
# 匹配的8-20位密码,可以是数字,字母下划线
re1 = re.match('[\w]{8,20}','asd123asd123')
print(re1.group())
表示字符串的边界
$表示以。。。。结尾
# 匹配的是邮箱,@符号前面有4,20位
re1 = re.match(r'[\w]{4,20}@163\.com$','asd123@163.comasd123')
^ 表示以。。。开头
re1 = re.match(r'^[\w]{4,20}@163\.com$','@asd123@163.com')
分组
|表示的是俩边任何一个表达式都可以
#匹配0-100的数字
re1 = re.match(r'[1-9]?\d$|100','100')
()分组
#匹配电话号码,要求取出要求取出区号或者电话号码。
re1=re.match(r'(\d{2,4})-(\d{7})$','0571-8922222')
print(re1.group())
print(re1.group(1))
print(re1.group(2))
\number关于引用分组匹配到的字符串
# 匹配的是<div>this is div</div>
# 匹配DIV。匹配尖括号DIV。尖括号。这是DIV。尖括号。
str1 = '<a>this is div</a>'
re1 = re.match(r'<[a-zA-Z]+>.*</[a-zA-Z]+>',str1)
re1 = re.match(r'<([a-zA-Z]+)>.*</\1>',str1)
print(re1.group())
注意点:
1、第一个分组的结果,作为第二个人分组额依据
2、适用于成对出现的数据
(?P) 和(?P=name)
str2 = '<div><a>这是包着的超链接</a></div>'
re1 = re.match('<(?P<name1>\w+)><(?P<name2>\w+)>.*</(?P=name2)></(?P=name1)>',str2)
print(re1.group())