正则表达式听课笔记代码

文章目录

概念

正则表达式相当于一个筛子,我们可以筛选出我们所需要的字符串,例如,在做网络爬虫的时候我们从一大段字符里提取出网页链接,这时,我们利用这个筛子,筛选出我们需要的字符串。

相关代码

import re
msg='佟丽娅娜扎热巴黛丝'
pattern=re.compile('佟丽娅')
result=pattern.match(msg) #从头匹配,如果头都没有匹配成功返回None
print(result)

#使用正则re模块的方法 match
s='娜扎热巴黛丝佟丽娅'
result=re.match('佟丽娅',s)  #从开头匹配,匹配不成功就就返回None
print(result)

result=re.search('佟丽娅',s)  #search 进行正则字符串的匹配方式,匹配的是整个字符串
print(result)
print(result.span()) #返回匹配的位置
print(result.group())  #提取到匹配的内容
print(result.groups())

print("--------------------")
#[]:表示一个范围
#a2b h6k匹配类似于这种格式的字符串
msg='abcd7vikfd8hdf00'
result=re.search('[a-z][0-9][a-z]',msg) #search懒惰匹配,找到一个就不再找
print(result)
print(result.group())
result=re.findall('[a-z][0-9][a-z]',msg) #匹配整个字符串,找到所有
print(result)

#a7a a88a a7878a
msg='a7aopa88ak igka7878a'
result=re.findall('[a-z][0-9]+[a-z]',msg) #后面加+,表示[0-9]大于等于1
print(result)

#qq号码验证 5-11位 开头不为0
qq='2473018942'
result=re.match('^[1-9][0-9]{4,10}$',qq)  #从头开始
print(result)

#用户名可以是字母数字下划线,不能是数字开头,用户名长度必须6位以上
username='admin001'
result=re.search('^[a-zA-Z]\w{5,}$',username)
print(result)

msg='a*py .py ab.txt bb.py kk.png uu.py'
result=re.findall(r'\w+\.py\b',msg)
print(result)
'''
.:任意字符(除换行符)
^:开头
$:结尾
[]:范围
正则预定义:
\s 空白
\b: 边界
\w:word [0-9a-zA-Z]
大写表示反面:
比如:\S :非空白
量词:
* >=0
+ >=1
? 0,1
'''
#分组
#匹配数字0-100数字
import re
n='100'
result=re.match(r'[1-9]?\d?$|100$',n)
print(result)

#(a|b|cd) 整体的或者
#验证邮箱 163 126 qq
email='2473018942@qq.com'
result=re.match(r'\w{5,20}@(163|126|qq)\.(com|cn)$',email)
print(result)

#不是以4、7结尾的手机号码(11位)
phone='19198262798'
result=re.match(r'1\d{9}[0-35-689]$',phone)
print(result)

#爬虫
phone='010-12345678'
result=re.match(r'(\d{3}|\d{4})-(\d{8})$',phone)
#分别提取
print(result.group())
#()表示分组
print(result.group(1))
print(result.group(2))

#
msg='<html>abc</html>'
msg1='<h1>hello</h1>'
result=re.match(r'<[0-9a-zA-Z]+>(.+)</[0-9a-zA-Z]+>$',msg1)
print(result)
print(result.group(1))
#number
result=re.match(r'<([0-9a-zA-Z]+)>(.+)</\1>$',msg1)
print(result)
print(result.group(1))
print(result.group(2))
#
print("-------------")
msg='<html><h1>abc</h1></html>'
result=re.match(r'<([0-9a-zA-Z]+)><([0-9a-zA-Z]+)>(.+)</\2></\1>$',msg)
print(result)
print(result.group(1))
print(result.group(2))
print(result.group(3))

import re
#起名方式: (?P<名字>正则)  引用:(?P=名字)
msg='<html><h1>abc</h1></html>'
result=re.match(r'<(?P<name1>\w+)><(?P<name2>\w+)>(.+)</(?P=name2)></(?P=name1)>',msg)
print(result)
print(result.group(1))
print(result.group(2))
print(result.group(3))

#sub(正则表达式,'新内容',string) 替换
def func(temp):
    num=temp.group()
    num1=int(num)+1
    return str(num1)

result=re.sub(r'\d+',func,'java:99,python:98')
print(result)

#split
result=re.split(r'[,:]','java:99,python:100') #在字符串中进行搜索,如果遇到:or,就分割
print(result)  #分割内容保存在列表中
'''
re模块:
match: 从头开始匹配
search: 匹配一次
findall: 查找所有
sub:
split:
'''
#贪婪模式:总是匹配尽可能多的,加?变成非贪婪,+是贪婪的。+?非贪婪
import re
#爬虫下载图片 
path='<img class="j_retract" id="big_img_1657319891437" src="https://tiebapic.baidu.com/forum/w%3D580%3B/sign=57c7dd214f46f21fc9345e5bc61f6a60/64380cd7912397dd21490bde1c82b2b7d0a2873c.jpg?tbpicau=2022-07-11-05_de4f0a168a401ef3983110e5341331cd" οnerrοr="this.src=//tb2.bdstatic.com/tb/static-frs/img/v2/picerr.gif";this.width=82;this.height=75;" style="visibility: visible;">'
result=re.match(r'<img class="j_retract" id="big_img_1657319891437" src="(.+)"',path)
print(result)
print(result.group(1))
image_path=result.group(1)
import requests
response=requests.get(image_path)
with open('aa.jpg','wb') as wstream:
    wstream.write(response.content)


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值