正则表达式入门练习笔记
目录
活动地址:CSDN21天学习挑战赛
import re #导入re模块
result=re.match('qwer','qwerty') #使用match方法进行匹配
result.group() #使用group方法进行数据提取
'qwer'
1.单个字符匹配
- . 匹配任意1个字符(除了\n)
- [] 匹配[]中列举的字符 \d 匹配数字,既0-9
- \D 匹配非数字,既不是0-9
- \s 匹配空格,既空格,tab键
- \S 匹配非空白
- \w 匹配单词字符,既a-z,A-Z,0-9,_
- \W 匹配非单词字符
练习1: 任意匹配一个字符
ret=re.match(".","M")
print(ret.group())
M
练习2:匹配长串字符
ret=re.match("l...","love")
print(ret.group())
love
练习3:选择开头匹配一个字符
ret=re.match("[hH]","hello")
print(ret.group())
h
练习4:选择开头匹配一串字符
ret=re.match("[hH]ello","Hello")
print(ret.group())
Hello
练习5:数字开头匹配
ret=re.match("[0123456789]hello","6hello")
print(ret.group())
6hello
练习6:有范围数字匹配
ret=re.match("[0-36-9]hello","9hello")
print(ret.group())
9hello
练习7:数字匹配
ret=re.match("空军\d号","空军1号")
print(ret.group())
空军1号
2.多个字符匹配
- * 匹配前1个字符出现0次或者无限次,既可有可无
- + 匹配前1个字符出现1次或者无限次,既至少有1次
- ? 匹配前1个字符出现1次或者0次,既要么有1次,要么没有
- {m} 匹配前1个字符出现m次 {m,n} 匹配前1个字符出现m到n次
import re
练习1:匹配第一个字母为大写,后面为小写且可有可无
ret=re.match("[A-Z][a-z]*","M")
print(ret.group())
M
练习2:匹配一串第一个字母为大写,后面为小写且可有可无
ret=re.match("[A-Z][a-z]*","MasRdfH")
print(ret.group())
Mas
练习3:判断names是否符合第一个字母为大写,小写或者下划线
names=["name1","_name","2_name","__name__"]
for name in names:
ret=re.match("[a-zA-Z_]+[\w]*",name)
if ret:
print("变量名 %s 符合要求" % ret.group())
else:
print("变量名 %s 非法" % name)
变量名 name1 符合要求
变量名 _name 符合要求
变量名 2_name 非法
变量名 __name__ 符合要求
练习4:匹配数字
ret=re.match("[1-9]?\d","33"):
print(ret.group())
33
练习5:?????why
ret=re.match("[1-9]?\d","09")
print(ret.group())
0
练习6:匹配6位是否包含a-z,A-Z,0-9,_
ret=re.match("[a-zA-Z0-9_]{6}","12ad45ad78ad")
print(ret.group())
12ad45
练习7:匹配8-30位密码 包含a-z,A-Z,0-9,_,*
ret=re.match("[a-zA-Z0-9_*]{8,30}","12ad_45ad7_8a*d66666")
print(ret.group())
12ad_45ad7_8a*d66666
3.匹配开头结尾
- ^ 匹配字符串开头
- $ 匹配字符串结尾
练习1:匹配手机号11位
ret=re.match("^135[0-9]{8}","13566666666")
print(ret.group())
13566666666
练习2:判断邮箱地址是否符合规定
email_list=["xiaowang@163.com","xiaoqing@6","xialiu"]
for email in email_list:
ret=re.match("[\w]{4-20}@163\.com$",email)
if ret:
print("%s 符合邮件地址规定" % ret.group)
else:
print("%s 不符合要求" % email)
xiaowang@163.com 不符合要求
xiaoqing@6 不符合要求
xialiu 不符合要求
4.分配分组
- | 或
- (ab) 将括号中字符作为一个分组
- \num 引用分组num匹配到的字符串
- (?P) 分组起别名
- (?P=name) 引用别名为name分组匹配到的字符串
练习1:判断数字是否小于100
ret=re.match("[1-9]?\d$|100","8")
print(ret.group())
8
练习2:判断邮箱是否是163或126或qq邮箱
email_list=["a@163.com","b@qq.com","c@126.com","d@gmail.com"]
for email in email_list:
ret=re.match("[\w]{1,20}@(163|126|qq)\.com",email)
if ret:
print("%s 属于邮箱范围" % ret.group())
else:
print("%s 不属于163或126或qq邮箱" % email)
a@163.com 属于邮箱范围
b@qq.com 属于邮箱范围
c@126.com 属于邮箱范围
d@gmail.com 不属于163或126或qq邮箱
练习3:提取区号和电话号码
ret=re.match("([^-]*)-(\d+)","010-123456")
print(ret.group())
print(ret.group(1))
print(ret.group(2))
010-123456
010
123456