python re模块
正则表达式 本身具有处理字符串的能力
如果 要处理的字符串 存在python 的内存里
模块 ->操作正则表达式
import re ret = re.findall("\d+","sfsafasf3ww33) print(ret) 一次性返回所有匹配到的项 直接存在列表中 ret = re.search("\d+","alfjalkjfalj3") print("\d+","wegwere2") if ret: print(ret.group()) 一次性只匹配一个符合条件的表达式,以对象的形式返回,通过对象.group()取实际值 如果没有匹配到 会返回none 调用group会报错
ret = re.match('\d+','adfafa8ada32')
print(ret) #获取到的是对象
match的好处是取值的时候有值则取值即可,无值则是None,用于判断方便些
findall和分组的问题
import re ret = re.findall("\d+(?:\.\d+)?","1.234+4.3") ?:写在一个分组的最开始,表示在faidall方法中取消这个分分组的优先级 print(ret) ret= re.search('\d+(\.\d+)?','1.2345+4.3') print(ret.group)
aa|bb.split("|")
split中如果带有分组,会在分割的同时保留被分割内容中带分组的部分
ret = re.split("(\d\d)","afafa34") print(ret) ret = re.sub("(\d\d)","afafa34",2) print(ret) ret = re.subn("(\d\d)","afafa34") print(ret)
节省时间complie
obj = re.complie("\d{3}")将正则表达式编译成一个 正则表达式的对象规则要匹配的对象是三个 print(obj) ret = obj.search('adafa123eeee') 正则节省时间表达式式对调用search,猜数为待匹配的字符串 print(ret.group())
迭代功能的 节省空间 finditer
ret = re.finditer("\d+","slfla123") print(ret) for i in ret : print(i.group)
# 基础查找 findall(分组优先显示) search match
# 替换分割 split(分组保留) sub subn
# 代码优化 compile finditer
分组命名
# html标签语言
# html是一种代码
# 对于浏览器来说 浏览器和代码之间有一种约定
# 写在一个标识符之内的代码 可以有一种独立的格式
# 标识符
# <h1>sgjkagjgdjkf</h1>
给分组起名字?P<a>正则表达式,使用分组的名字(?P=a)
# ret = re.search('<(?P<tag>\w+?)>\w+</(?P=tag)>',"<b>hello</b>") # print(ret.group()) # print(ret.group('tag'))
根据分组的索引使用分组 \1,1是分组的索引值 # ret = re.search(r'<(\w+?)>\w+</\1>',"<b>hello</b>") # print(ret.group()) # print(ret.group(1)) # ret = re.search(r"<(\w+)>\w+</\1>","<h1>hello</h1>") # ret.group(1) # ret = re.finditer(r'<(\w+?)>\w+</\1>',"<b>hesakdfkhfkllo</b>") # for i in ret: # print(i.group(1)) # print(i.group())
问号的作用
# ? # 量词\惰性匹配\取消分组优先\分组命名 # ret=re.findall(r"\d+\.\d+|(\d+)","1-2*(60+(-40.35/5)-(-4*3))") # while '' in ret: # ret.remove('') # print(ret)