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("(dd)","afafa34")
print(ret)
ret = re.sub("(dd)","afafa34",2)
print(ret)
ret = re.subn("(dd)","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)

  

 

 

 

  

  

原文地址:https://www.cnblogs.com/lnrick/p/9309871.html