Python攻关之模块(2)

本文详细介绍了Python的re模块,包括元字符的使用,如`.`、`^`、`$`、`*`、`+`、`?`、`{}`等,以及字符集`[]`的用法。通过实例展示了如何进行模糊匹配和精确匹配,如重复匹配、边界匹配等,并探讨了`findall`、`search`、`match`等方法的差异。同时,还讨论了反斜杠``在转义和创建特殊字符中的作用,以及`()`和`|`的组合使用。最后,简要提到了`split`、`sub`和`compile`等正则表达式的方法。
摘要由CSDN通过智能技术生成

一、re模块
string 提供的方法是完全匹配
引入正则:模糊匹配

import re

eg:
ret = re.findall(‘w\w{2}l’,‘hello world’)
print(ret)

ret = re.findall(‘w.l’,‘hello world’) # .只能代指一个字符
print(ret)

元字符

元字符: . ^ $ * + ? { } [ ] | ( ) \

1 . 通配符
ret = re.findall(‘w…l’,‘hello w\t ld’)
print(ret)

2 ^ 尖角符 只在开始匹配 既从 第一个开始
ret = re.findall(’^h…o’,‘hdsfgcashello’)
print(ret)

3 $ 相反于尖角符 它是只从结尾匹配
ret = re.findall(‘a…x$’,‘hsisdksdalexddauyx’)
print(ret)

4 重复匹配

* 重复匹配 [0,oo] 0到正无穷

ret = re.findall(‘ba*’,‘dsjajdsnbaaaaaaa’)
print(ret)

+ 重复匹配 [1,oo] 1到正无穷 至少有一次

ret = re.findall(‘ab+’,‘sdsdfah’) #匹配b 至少出现一次b
print(ret)

ret = re.findall(‘a+b’,‘aaabgdasdb’) #匹配a 至少出现一次a
print(ret)

? 重复匹配 [0,1] 0次或一次
ret = re.findall(‘a?b’,‘aaaabhdabdfb’) #匹配a
print(ret)

{} 精确匹配 大括号里面什么都没有 默认正无穷
ret = re.findall(‘a{1,3}b’,‘b’)
print(ret)

结论: * 等于 {0,正无穷}
+ 等于 {1,正无穷}
? 等于 {0,1}

6.字符集 [] 相当于一个或的关系
ret = re.findall(‘a[cd]x’,‘adx’) #即[]里面c或d都可以
print(ret)

ret = re.findall(’[a-z]’,‘adx’) #这里表示一个范围
print(ret)

另外
[]字符集: 取消元字符的特殊功能(\ ^ -),括号内三个例外

ret = re.findall(’[w,]’,'adwx’) #这里的就是
print(ret)

ret = re.findall(’[1-9a-zA-Z]’,‘12sdDS’) #这里的- 就没有被取消功能
ret = re.findall(’[1-9,a-z,A-Z]’,‘12sdDS’)
print(ret)

^ 放在[]里 : 取反
ret = re.findall(’[^iu]’,‘iu12sdDS’) #除了iu 都匹配
print(ret)

ret = re.findall(’[^4,5]’,‘iu4dfs5D’) #除了4和5 都匹配 这里 4 5 是一个整体
print(ret)


  1. 反斜杠后边跟元字符去除特殊功能
    反斜杠后边跟普通字符实现特殊功能

\d 匹配任何十进制数;它相当于类 [0-9]。
\D 匹配任何非数字字符;它相当于类 [^0-9]。
\s 匹配任何空白字符;它相当于类 [ \t\n\r\f\v]。
\S 匹配任何非空白字符;它相当于类 [^ \t\n\r\f\v]。
\w 匹配任何字母数字字符;它相当于类 [a-zA-Z0-9_]。
\W 匹配任何非字母数字字符;它相当于类 [^a-zA-Z0-9_]
\b 匹配一个特殊字符边界,比如空格 ,&,#等

print(re.findall(’\d{11}’,‘asdsfda122345451215sd4fsas’))
输出结果:[‘12234545121’]
print(re.findall(’\sasd’,‘fak asd’))
输出结果:[’ asd’]
print(re.findall(’\w’,‘fak asd’))
输出结果:[‘f’, ‘a’, ‘k’, ‘a’, ‘s’, ‘d’]

\b 匹配一个特殊字符边界
print(re.findall(r’I\b’,‘hello,I am a LI$T’))
[‘I’, ‘I’]

##############################################################

re.search() 匹配出满足条件的第一个结果

print(re.search(‘sb’,‘sdsfadsbdsfsasdsb’)) #得到一个对象
输出结果:<_sre.SRE_Match object; span=(6, 8), match=‘sb’>

ret = re.search(‘sb’,‘sdsfadsbdsfsasdsb’) #取出对象里面的内容
print(ret.group())

\后面加元字符 使得元字符没有特殊意义

ret = re.search(‘a\.’,‘a.gj’).group()
print(ret)
输出结果:a.

重点:
import re
ret=re.findall(‘c\l’,‘abc\le’)
print(ret)#[]
ret=re.findall(‘c\\l’,‘abc\le’)
print(ret)#[]
ret=re.findall(‘c\\\\l’,‘abc\le’)
print(ret)#[‘c\\l’]
ret=re.findall(r’c\\l’,‘abc\le’)
print(ret)#[‘c\\l’]

这里的 不加r \\\\ 为什么就能匹配出来呢?
#因为两个\\是在re模块中 两个\\是在python解释器下

加r \\能够匹配出来
因为加r告诉了python解释器这里的\\是re模块里面的
可以参照文件夹里面的图片

m = re.findall(’\bblow’, ‘blow’)
print(m)
m = re.findall(r’\bblow’, ‘blow’)
print(m)

8.() |

print(re.search(’(as)+’,‘sdsaasas’).group()) #asas
()是将括号里面的as作为一个整体 来查找

print(re.search(’(as)|3’,‘3as’).group()) #as
| 是 或 的意思

正则表达式的方法

  1. findall(): 所有结果都返回一个列表里
  2. search(): 返回匹配到的第一个对象(object),对象可以调用group()返回结果
    3.match(): 只在字符串开始匹配,也只返回一个对象。用group返回结果

ret = re.match(‘asd’,‘asdasasd’)
print(ret)

4.split() 分割
ret = re.split(’[s,k]’,‘dsdsfkda’)
print(ret)

ret = re.split(’[s,k]’,‘sdsfkda’) #******
print(ret)
输出结果:[’’, ‘d’, ‘f’, ‘da’]

5.sub 替换
ret = re.sub(‘a…x’,‘soob’,‘sdjskdjaalexdnsd’)
print(ret)

6.compile #把规则编译成对象,方便调用
obj = re.compile(’\.com’)
ret = obj.findall(‘www.baidu.com’)
print(ret)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值