什么岁月静好,不过是有人替你负重前行!哪有

Python中re模块详细介绍

正则的介绍及应用实例详解

 

复制代码
"""
1、什么是正则
    正则就是用一系列具有特殊含义的字符组成一套规则,该规则用来描述具有某一特征的字符串,
    正则就是用来去一个大的字符串中匹配出符合规则的子字符串

2、为什么要用正则
    1、用户注册
    2、爬虫程序

3、如何用正则


"""
import re
#\w匹配字母数字下划线-----------\W匹配非字母数字下划线
print(re.findall('\w','hello 123_ */-='))
print(re.findall('\W','hello 123_ */-='))

#\s匹配任意空白字符(\n \t都是空,都可以被\s匹配)-----------\S匹配任意非空白字符
print(re.findall('\s','hell\no 12\t3_ */-='))
print(re.findall('\S','hell\no 12\t3_ */-='))

#\d匹配任意数字-------------\D匹配任意非数字
print(re.findall('\d','hell\no 12\t3_ */-='))
print(re.findall('\D','hell\no 12\t3_ */-='))

print(re.findall('\n','hell\no 12\t3_ */-='))
print(re.findall('\t','hell\no 12\t3_ */-='))
print(re.findall('l','hell\no 12\t3_ */-='))

#直接匹配我们输入的内容
print(re.findall('egon','my name is egon,egon is beautiful'))
#                                                     egon
# ^只匹配字符串的开头----------$只匹配字符串的末尾
print(re.findall('^egon','egon my name is egon,egon is beautiful'))
print(re.findall('egon$','egon my name is egon,egon is beautifulegon1'))
#                                                                egon


# 重复匹配
# .:匹配换行符以外的任意一个字符,(也可以用多个点,匹配多个任意字符)
print(re.findall('a.c','abc a1c aac asd aaaaac a*c a+c abasd')) #['abc','a1c','aac','aac','a*c','a+c']
#                                                        a.c
print(re.findall('a.c','abc a1c aac a\nc asd aaaaac a*c a+c abasd',re.DOTALL))  #re.DOTALL匹配所有任意字符,\n可以被匹配到
print(re.findall('a..c','abc a1c aac a\nc asd aaaaac a*c a+c abasd',re.DOTALL))

# []:匹配一个字符,该字符属于中括号内指定的字符,(可以缩小点的精度)
print(re.findall('a..c','abc a1 c aac asd aaaaac a *c a+c abasd ='))
print(re.findall('a.c','abc a1 c aac aAc aBc asd aaaaac a-c a/c a *c a+c abasd = a1c a2c'))
print(re.findall('a[a-z]c','abc a1 c aac aAc aBc asd aaaaac a-c a/c a *c a+c abasd = a1c a2c'))
print(re.findall('a[A-Z]c','abc a1 c aac aAc aBc asd aaaaac a-c a/c a *c a+c abasd = a1c a2c'))
print(re.findall('a[-+*/]c','abc a1 c aac aAc aBc asd aaaaac a-c a/c a *c a+c abasd = a1c a2c'))
print(re.findall('a[a-z][a-z]c','abc a1 c aac aAc aBc asd aaaaac a-c a/c a *c a+c abasd = a1c a2c'))
print(re.findall('a[^a-z]c','abc a1 c aac aAc aBc asd aaaaac a-c a/c a *c a+c abasd = a1c a2c'))


# *: 必须与其他字符连用,代表左侧的字符出现0次或者无穷次
print(re.findall('ab*','a ab abbb abbbb a1bbbb a-123'))
#                                              ab*
#['a','ab','abbb','abbbb','a','a']
print(re.findall('ab{0,}','a ab abbb abbbb a1bbbb a-123'))



# ?: 必须与其他字符连用,代表左侧的字符出现0次或者1次
print(re.findall('ab?','a ab abbb abbbb a1bbbb a-123'))
#                                              ab?
#['a','ab','ab','ab','a','a']
print(re.findall('ab{0,1}','a ab abbb abbbb a1bbbb a-123'))


# +: 必须与其他字符连用,代表左侧的字符出现1次或者无穷次
print(re.findall('ab+','a ab abbb abbbb a1bbbb a-123'))
#                                              ab+
# ['ab','abbb','abbbb']
print(re.findall('ab{1,}','a ab abbb abbbb a1bbbb a-123'))


# {n,m}: 必须与其他字符连用,代表左侧的字符出现{n,m}次,完全可以取代*、?、+
print(re.findall('ab{1,3}','a ab abbb abbbb a1bbbb a-123'))
#                                                  ab{1,3}
# ['ab','abbb','abbb']


# .*:贪婪匹配(匹配不精准)
print(re.findall('a.*c','ab123adfc1134124123adasfc123123'))

# .*?:非贪婪匹配:推荐使用(爬虫经常用)
print(re.findall('a.*?c','ab123adfc1134124123adasfc123123'))
#                                            a.*?c


#():分组,可以结合非贪婪匹配,匹配网址,()不影响匹配的结果,最终取的是分组内的
print(re.findall('expression="(.*?)"','expression="1+2+3/4*5" egon="beautiful"'))
#                                       expression=".*?"


print(re.findall('href="(.*?)"','<p>段落</p><a href="https://www.sb.com">点我啊</a><h1>标题</h1><a href="https://www.sb.com">点我啊</a>'))



#|:   #连接左右两个正则表达式,匹配一个成功即成功匹配
print(re.findall('a|b','ab123abasdfaf'))
#                        a|b
#先不看分组,先按照正常的进行匹配,
print(re.findall('compan(?:ies|y)','Too many companies have gone bankrupt, and the next one is my company'))

#companies   company



print(re.findall(r'a\\c','a\c a1c aAc aac'))
print(re.findall('a\\\\c','a\c a1c aAc aac'))

print(re.findall('ale(x)','alex is SB,alex is bigSB'))
print(re.search('alex','alex is SB,alex is bigSB'))
print(re.search('ale(x)','alex is SB,alex is bigSB').group())
print(re.search('abcdefg','alex is SB,alex is bigSB'))

print(re.search('^alex','123alex is SB,alex is bigSB'))
print(re.match('alex','123alex is SB,alex is bigSB'))

l='egon:18:male'.split(':')
print(l)
l1=re.split('[ :/-]','a-b/c egon:18:male xxx')
print(l1)

print(re.sub('[a-z]+xx','yxp','lxx is good,sb is lllxx wxx is good cxx is good'))
#                                                   [a-z]+xx

pattern=re.compile('alex')
print(pattern.findall('alex is SB,alex is bigSB'))
print(pattern.search('alex is SB,alex is bigSB'))
复制代码

 

posted @   迎风而来  阅读(774)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
/*吸附球*/
点击右上角即可分享
微信分享提示

喜欢请打赏

扫描二维码打赏

了解更多