Python自学记录(正则)

# #正则表达式
# #针对字符串进行数据筛选的表达式  (匹配)
# import re
# strr="张三李四王五赵六"
# pat="王五"  #正则表达式# rst=re.search(pat,strr) #在strr字符串中找是否有符合pat表达式的值 re.search 扫描整个字符串并返回第一个成功的匹配。
# print(rst)


import re

#原子:正则表达式中实现匹配的基本单位
#元字符:正则表达式中具有特殊含义的字符
#以普通字符作为原子(匹配一个普通字符)
# a="湖南湖北广东广西"
# pat="湖北"
# result=re.search(pat,a)
# print(result)

#匹配通用字符
# \w 任意字母 数字 下划线
# \W 和小写w相反
# \d 十进制数字
# \D 除了十进制数以外的值
# \s 空白字符
# \S 非空白字符

# b="13293132521"
# pat2=r"1\d\d\d\d\d\d\d\d\d\d" #以1开头后面跟10个数字 手机号
# print(re.search(pat2,b))
# c="asdfdsf!@#$vdsav"
# pat3=r"\w\w\w"
# print(re.search(pat3,c))

#匹配数字,英文,中文
#数字[0-9]
#英文[a-z] [A-Z]
#中文[\u4e00-\u9fa5]
# d="!@#$%$$$张三$$$$#!!!!boy!@@@@@@@@@@@@########$!23!%!%!!%&^*%^$"
# pat1=r"[\u4e00-\u9fa5][\u4e00-\u9fa5]"
# pat2=r"[a-z][a-z]"
# pat3=r"[0-9][0-9]"
# result1=re.search(pat1,d)
# result2=re.search(pat2,d)
# result3=re.search(pat3,d)
# print(result1,result2,result3)

#原子表
#定义一组平等的原子
# b="13293132521"
# pat2=r"1[3456789]\d\d\d\d\d\d\d\d\d" 
# print(re.search(pat2,b))
# c="dgrrheregepythondsfsdbdg"
# pat3=r"py[abcdt]hon" #原子表中每一个原子都是单独的字符,不能连接输出 例如,pytabhon就无法输出
# print(re.search(pat3,c))

#元字符---正则表达式中具有特殊含义的字符
# .匹配任意字符 \n除外
# ^匹配字符串开始位置  ^136  以136开头
# $匹配字符串中结束位置  6666$  以6666结尾
# *重复0次1次多次前面的原子  /d* 
# ?重复一次或者0次前面的原子
# +重复一次或者多次前面的原子
# d="132931316851329313252115226899762"
# pat1="..."
# pat2=r"^132\d\d\d\d\d\d\d\d"
# pat3=".*9762$"
# pat4="8*"
# pat5="8+"
# print(re.search(pat5,d))


#匹配固定次数
#{n}前面的原子出现了n次
#{n,}至少出现n次
#{n,m}出现次数介于n-m之间
# a="234654234sad5"
# pat1=r"\d{8,10}"
# print(re.search(pat1,a))


#多个表达式 | (或)连接
# 假如需要在网页中爬取手机号
# a="13293132521"
# b="027-1234567"
# pat1=r"13\d{9}|\d{3}-\d{7}"
# print(re.search(pat1,a))


#分组
# a="safhwuinv;pythonxajiwbfewimsadjiwjavaofhwef!@13293132521#$%^&*(&&!#$!$^*#"
# pat=r"(python).{0,}(java).{0,}(1[3578]\d{9})"
# print(re.search(pat,a).group(3))
#------------------------------------
# a="safhwuinv;pythonxajiwbfewimsadjiwjavaofhwef!@aaa13293132521bbb#$%^&*(&&!#$!$^*#"
# pat=r"aaa(.*?)bbb"
# print(re.findall(pat,a))


#贪婪模式和非贪婪模式
#贪婪模式:在整个表达式匹配成功的前提下,尽可能多的匹配;
#非贪婪模式:在整个表达式匹配成功的前提下,尽可能少的匹配(?);
#Python中默认是贪婪的
# strr='aa<div>test1</div>bb<div>test2</div>cc'
# pat1=r"<div>.*</div>"  #左边是<div>右边是</div> 中间是任意内容
# print(re.search(pat1,strr)) #贪婪模式 输出:'<div>test1</div>bb<div>test2</div>'
#------------------------------------------------------------
# strr='aa<div>test1</div>bb<div>test2</div>cc'
# pat1=r"<div>(.*?)</div>"  #左边是<div>右边是</div> 中间是任意内容
# print(re.findall(pat1,strr)) #非贪婪模式  search(pat1,strr)输出:'<div>test1</div>'
#                                         #findall(pat1,strr)输出:'test1', 'test2'


#compile函数---将正则表达式转换成内部格式,提高执行效率
# strr="python666Java"
# pat=re.compile(r"Python",re.I)  #re.I模式修正符:忽略大小写
# print(pat.search(strr))


#match函数和search函数
#match函数--匹配开头
#search函数--匹配任意位置
#两个函数都是一次匹配,匹配到一次就不再往后匹配了
# strr="pythonjavahtmljs"
# pat=re.compile(r"java")
# print(pat.search(strr)) #search(strr)输出java match(strr)输出空


#findall()  查找所有匹配内容,装到列表中
#finditer() 查找所有匹配内容,装到迭代器中 for循环取出
# strr="hello------------hello-----------hello-----------hello------\
# --hello--------hello----------------hello----------hello---------------\
# -----hello---------hello--------hello------hello-----------hello---------\
# ----hello------hello------------------hello-------------"
# pat=re.compile(r"hello")
# #print(pat.findall(strr))
# data=pat.finditer(strr)
# list1=[]
# for i in data:
#     list1.append(i.group())
# print(list1)


#split()  按照能够匹配的字符串将字符串分割后返回列表
#sub()  用于替换

strr1="张三,,,,,李四,,,,,,,,,,,王五,,赵六"

pat1=re.compile(r",+")

result1=pat1.split(strr1)

strr2="hello 123,hello 456!"

pat2=re.compile(r"\d+")

result2=pat2.sub("666",strr2)

print(result2)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值