欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

python正则re模块学习笔记

程序员文章站 2022-04-19 13:24:04
import re“”"re模块findall:查找所有符合规范的数据第一个参数:匹配规则第二个参数:被查找的字符串返回值:list:所有符合规范的数据search:match:sub:“”"s1 = “rdtfy13199889988guhijokd13199889988fghjgf13199881988dgh”c = re.findall(‘13199889988’, s1)print©正则表达式的匹配规则———————单字符串的匹配————————————第一:’.'表...

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