Python-正则表达式入门练习笔记

正则表达式入门练习笔记

目录

1.单个字符匹配

2.多个字符匹配

3.匹配开头结尾

4.分配分组

活动地址: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


                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值