2020-04-02 正则详情

学习笔记之四十一

1、第三方包的应用:除自定义模块、系统模块之外的模块,需要引用的话德线下载,再导入

应用如pillow 专门处理图片的模块
下载方式有两种:

1、(交互式)pip install 第三方模块名 
 2、pycharm里边setting 设置下载
 实例:import requests
 response=requests.get('http://www.12306.cn/') 
 #访问12306网站
 print(response.text)

2、正则表达式

定义:

是对字符串操作的一种逻辑公式,用实现定义好的特定字符、及这些特定字符的组合,组成一个"规则字符串",
其称为 正则表达式,正统表示法,正规表达式,常规表达式等,英语regular expression ,简称 re regex等

正则表达式是对字符串(普通字符(a-z之间的字母)和特殊字符(元字符))操作的一种逻辑公式,

作用:给定一个正则表达式和一个字符串,可以达到如下目的:

1)、给定的字符串是否符合正则表达式的过滤原则(称作 匹配)
 2)、可以通过正则表达式,我们获取字符串中想要的部分
 特点:
 1)、灵活性、逻辑性和功能性非常强;
 2)、可以迅速的用极简单的方式达到对字符串的复杂控制;

应用环境举例:
1)、如何判断一个字符串为手机号呢?
2)、如何判断邮箱为163或126的所有邮件地址?3)、提取一长串字符串中的部分(切片索引很复杂不好处理时)?

例1:

import re
msg='佟丽娅呵护思考就能看'
pattern=re.compile('佟丽娅')
result=pattern.match(msg)print(result)  
#若匹配不到,返回 None,匹配到则返回 span=(正则式的起始下标) 
match='匹配到的内容'
例如:<_sre.SRE_Match object,span=(x,x),match='佟丽娅'>


例二:使用正则re模块方法:

match#只从开头开始匹配,匹配不成功就返回None
	
	s='佟丽娅呵护思考就能看'result=re.match('佟丽娅',s)
	print(result)
	
	search  匹配 #对整个字符串任意位置开始匹配,匹配不成功返回None,
	qie匹配到一个OK结果就返回结果停止匹配result=re.search('佟丽娅',s)
	
	print(result)print(result.span()) #返回起始位置下标 ,
	例如 (2,4print(result.group())
	返回匹配到的内容 例如 '佟丽娅'

例三:[] 表示一个范围,

findall 匹配整个字符串,若匹配ok,直至匹配到字符串结尾,

	0-9 表示09之间的任意数字,a-z a到z之间的任意字符 但是[0-9][a-z]只表示一位从字符串
	
	s='dsf2jk3jew4k4kv5sd' 中匹配 k3f  e8y 先根据需要匹配到的内容总结处正则表达式 ,
	re='[a-z][0-9][a-z]'
	
	msg='dsf2jk3jew4k4kv5sd'
	result=re.match('[a-z][0-9][a-z]',msg)
	print(result.group())
	
	findall 匹配整个字符串,若匹配ok,直至匹配到字符串结尾,

常用正则符号: 模式可变,下边用[0-9] 

举例

*’ 将[0-9] 匹配>=0次
‘+’将[0-9] 匹配>=1次
‘?’将[0-9] 匹配01次

‘^’表示从字符串的行首 第一个字符开始匹配
 ‘$’表示匹配到字符串的最后一个字符
   ‘.’表示代替除换行符(\n)之外的所有字符 

 \w 表示任意字符、数字、下划线,但只表示一位   {m,n}[0-9}匹配m~n次,即大于≥m次,≤n次 

  {m,} 匹配≥m次,无上限  {,n}  匹配≤n次,无下限  {m} 匹配m次  
   {n} 匹配n次 

 \b 匹配边界 bordor  边界单词
 \d 任意数字 digital  [0-9]
 \s任意空白字符 space 空格
  \w 任意字母数字下划线 word  [a-z0-9A-Z_]

 \大写字母,表示相反意思
 [ABC]表示一个范围,字母A 或 B  或C
(word|word|word) 表示word1或23

例如:a7a a88aa c999c 中间数字至少一个 大于等于一次 +

msg='afdff66we435ff234sd34fs4df443fs455a'
result=re.findall('[a-z][0-9]+[a-z]',msg)
print(result.group())
注意:将需要匹配的次数表示在该模式后边例如: 

qq号码验证,5-11位,开头不能是0,注意,因为是qq号,数字不能多,所以必须匹配到最后一位,所以加$

qq='2342424079'
result=re.match('[1-9][0-9]{4,10}$',msg)
print(result.group())

例如:

用户名可以是字母数字,但不能以数字开头,且用户名长度8位以上 任意字母数字 [0-9a-zA-Z]

username='admin001'
result=re.serach(^'[a-zA-Z][a-z0-9A-Z]{7,}$',username)

#可以简写为 result=re.serach(^'[a-zA-Z]\w{7,}$',username)
print(result)

例如:搜索py文件 首先py 为结尾,所以用\b 表示边界,py前有一个’.’ ,需要用. 代替, .前边有字符 \w,0个 一个两个不等, 数量用* 则正则表达式为 \w*.py\b 又的取消\的转义作用,前边加 r

s= 'a.py ab.text  bb.py kk.png uu.py apyb.py  .py'

result=re.findall(r'\w*.py\b,s)
print(result)
#返回值存于list中正则式的分组 **|** | 或的意思
例如:匹配1-100之间的数字n='100'

改进版  因为0-99 有两位,100时三位数

result=re.match(r'[1-9]?\d?$|100$'n)


print(result)

输入验证的邮箱 163 126 qq 前边数字5-20位

email='3243431@163.com'
result=re.match(r'\w{5,20}@(163|126|qq)\.(cpm|cn)$,email)

print(result)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值