python正则re模块学习笔记
import re
“”"
re模块
findall:查找所有符合规范的数据
第一个参数:匹配规则
第二个参数:被查找的字符串
返回值:list:所有符合规范的数据
search:
match:
sub:
“”"
s1 = “rdtfy13199889988guhijokd13199889988fghjgf13199881988dgh”
c = re.findall(‘13199889988’, s1)
print©
正则表达式的匹配规则
———————单字符串的匹配————————————
第一:’.'表示匹配\n之外的任意字符
s2 = “111\naaa”
c2 = re.findall(’.’, s2)
print(c2)
第二:使用[]进行举例
s3 = “111aa3333a222227890000vbaujndhbba…。!》2132–982a”
c3 = re.findall("[a32]", s3) # 匹配s3中的a 3 2
c4 = re.findall(’[0-9a-zA-z]’, s3) # 批次s3中的数字,小写字母,大写字母
print(c3)
print(c4)
第三:使用\d表示匹配数字
s4 = “4567gh?-[:’,>]jkTrue”
c5 = re.findall(’\d’, s4)
print(c5)
第四:使用\D表示匹配非数字
c6 = re.findall(’\D’, s4)
print(‘这是c6’, c6)
第五:使用\s表示匹配空白
s5 = " 67 nn"
c7 = re.findall(’\s’, s5)
print(c7)
第六:使用\S表示匹配非空白
c8 = re.findall(’\S’, s5)
print(c8)
第七:使用\w表示单词字符,即数字、字母、下划线(同样包括中文)
s6 = “pa12_?*&# %%^&你好”
c9 = re.findall(’\w’, s6)
print(c9)
第八:使用\W表示非单词字符
c10 = re.findall(’\W’, s6)
print(c10)
---------------表示数量--------------
第九:使用{n}表示前一个字符出现n次
s7 = “rd123456789011tfy13199889988guhijokd13199889928fgh99999999999jgf13199881988dgh”
c11 = re.findall(’\d{11}’, s7) # 匹配出现11次的数字
print(c11)
第10:使用{n,m}表示前一个字符出现n-m次
s11 = ‘a22b111cd1234567890aaa5555nnn777890mmmm’
c12 = re.findall(’\d{3,5}’, s11) # 匹配s11中出现3次到5次的数字
print(‘这是c12’, c12)
“”"
贪婪模式:最符合匹配的规范之内,尽可能匹配更多的内容。默认开启了贪婪模式
非贪婪模式:最符合匹配的规范之内,尽可能匹配更少的内容。
使用?关闭贪婪模式
“”"
第11:使用?关闭贪婪模式
c13 = re.findall(’\d{3,5}?’, s11) # 使用?关闭贪婪模式后,只会三个数字三个数字的匹配
print(c13)
------------------表示数量---------------
第12:使用{n,}表示前一个字符至少出现n次
c14 = re.findall(’\d{3,}’, s11)
print(c14)
第13:使用*表示前一个字符出现0次或者n次(0次以上)
s12 = “abc123ccc1mmm234mmm1234”
c15 = re.findall(’\d*’, s12) # 打印出现0次或者n次的数字
print(c15, ‘这是c15’)
“”"
打印的结果如下,字母表示数字出现了0次,所以会有空字符串
[’’, ‘’, ‘’, ‘123’, ‘’, ‘’, ‘’, ‘1’, ‘’, ‘’, ‘’, ‘234’, ‘’, ‘’, ‘’, ‘1234’, ‘’]
“”"
第14:使用+表示前一个字符出现1次或者n次(1次以上)
c16 = re.findall(’\d+’, s12)
print(c16)
-----------------表示边界---------------
第15 使用\b表示单词边界
“”“所谓单词边界,就是单词开头的地方,比如一行开通,比如用逗号和空格分开两个单词
python 123 python567?python
“””
s13 = “python123python567?python”
c17 = re.findall(r’\bpython’, s13)
print(“这是c17”,c17)
第16 使用\B表示非单词边界
c18 = re.findall(r’\Bpython’, s13)
print(c18)
第17 使用^ 表示字符串开头
s14 = “python123java567php”
c18 = re.findall(’^python123’, s14) # 开头是python123,所以匹配结果非空
c19 = re.findall(’^java’, s14) # java不在开头,所以匹配结果是空
print(c18)
print(c19)
第18 使用$表示字符串结尾
c20 = re.findall(“567php$”, s14)
print(c20)
第19 使用|表示匹配多个规范,多个规范之间是或的关系,|是Linux中的管道符
c21 = re.findall(’^python|php$’, s14)
print(c21)
第20 使用()表示分组匹配
‘’'使用表示前一个字符出现0次或者n次(0次以上),使用?关闭贪婪模式’’’
data = ‘{“user”:#user#,“pwd”:#pwd#,“name”:"#name#",“age”:"#age#"}’
“”"
需要匹配#开头和#结尾的字符串
因为不知道要匹配的内容,所以用.表示任意字符
因为不知道要匹配内容的长度,所以用表示出现0次或者0次以上
使用?关闭贪婪
使用()把括号中的内容提取出来
“”"
res = re.findall("#(.*?)#",data)
print(res)
search 应用
data = ‘{“user”:#user#,“pwd”:#pwd#,“name”:"#name#",“age”:"#age#"}’
res = re.search("#(.*?)#",data)
返回的式一个匹配对象
print(res)
获取匹配到的数据
key = res.group()
print(key)
获取匹配规则中括号里面的内容
item = res.group(1) #获取第一个括号中的内容
print(item)
value = ‘shishi’
data = data.replace(key,value)
print(data)
本文地址:https://blog.csdn.net/hiposy/article/details/107144404