您当前的位置:首页 > IT编程 > python
| C语言 | Java | VB | VC | python | Android | TensorFlow | C++ | oracle | 学术与代码 | cnn卷积神经网络 | gnn | 图像修复 | Keras | 数据集 | Neo4j | 自然语言处理 | 深度学习 | 医学CAD | 医学影像 | 超参数 | pointnet | pytorch | 异常检测 | Transformers | 情感分类 | 知识图谱 |

自学教程:Python全栈之路正则函数

51自学网 2022-02-21 10:46:52
  python
这篇教程Python全栈之路正则函数写得很实用,希望能帮到您。

1. 反向引用_命名分组

# ### 反向引用import restrvar = "<div>明天又要休息了</div>"obj = re.search("<(.*?)>(.*?)<(.*?)>",strvar)print(obj)# 获取匹配到的内容res1 = obj.group()print(res1)# 获取分组里的内容res2 = obj.groups()print(res2)# 反向引用的语法 /1把第一个括号里面匹配到的内容在引用一次obj = re.search(r"<(.*?)>(.*?)<//1>",strvar)print(obj)print(obj.group())print(obj.groups())strvar = " z3d4pzd a1b2cab "obj = re.search(r"(.*?)/d(.*?)/d(.*?)/1/2",strvar)print(obj)print(obj.group())print(obj.groups())# ### 命名分组"""3) (?P<组名>正则表达式) 给这个组起一个名字4) (?P=组名) 引用之前组的名字,把该组名匹配到的内容放到当前位置"""# 写法一strvar = " z3d4pzd a1b2cab "obj = re.search(r"(?P<tag1>.*?)/d(?P<tag2>.*?)/d(?P<tag3>.*?)/1/2",strvar)print(obj)print(obj.group())# 写法二strvar = " z3d4pzd a1b2cab "obj = re.search(r"(?P<tag1>.*?)/d(?P<tag2>.*?)/d(?P<tag3>.*?)(?P=tag1)(?P=tag2)",strvar)print(obj)print(obj.group())

2. 正则函数

# ### 正则函数import re# search   通过正则匹配出第一个对象返回,通过group取出对象中的值strvar = "3+4 6*4"obj = re.search(r"(/d+[+*]/d+)",strvar)print(obj)# 获取匹配到的内容print(obj.group())# 获取分组当中的内容 (返回元组)print(obj.groups())# match    验证用户输入内容 (了解)"""search在正则表达式的前面加上^ 等价于 match ,其他用法上一模一样"""strvar = "a17366668888"strvar = "17366668888"# obj = re.search(r"^/d+",strvar)# obj = re.match(r"/d+",strvar)# print(obj.group())print(obj)# split    切割strvar = "alex|wusir_xboyww@risky"lst = re.split("[|_@]",strvar)print(lst)strvar = "alex2341273894wusir234234xboyww11111risky"lst = re.split("/d+",strvar)print(lst)# sub      替换 strvar = "alex|wusir_xboyww@risky""""strvar = strvar.replace("|","&")strvar = strvar.replace("_","&")strvar = strvar.replace("@","&")print(strvar)"""# sub(正则,替换的字符,原字符串[,替换的次数])res = re.sub("[|_@]","&",strvar)res = re.sub("[|_@]","&",strvar,1)print(res)# subn     替换  (用法上与sub相同,只是返回值不同)res = re.subn("[|_@]","&",strvar)res = re.subn("[|_@]","&",strvar,2)print(res) # res = re.sub("[|_@]","&",strvar)# ('alex&wusir&xboyww@risky', 2)# finditer 匹配字符串中相应内容,返回迭代器"""返回的是迭代器,迭代器中包含了对象 对象.group来获取匹配到的值"""from collections import Iterator, Iterablestrvar = "sdf23647fdgdfg()*()*23423423"it = re.finditer("/d+",strvar)print(isinstance(it,Iterator))for obj in it:	print(obj.group())# compile  指定一个统一的匹配规则"""正常情况下,正则表达式编译一次,执行一次为了避免反复编译,节省时间空间,可以使用compile统一规则编译一次,终身受益"""strvar = "asdfs234sdf234"pattern = re.compile("/d+")print("<===>")obj = pattern.search(strvar)print(obj.group())lst = pattern.findall(strvar)print(lst)# 修饰符 # re.I 使匹配对大小写不敏感strvar = "<h1>大标题</H1>"pattern = re.compile("<h1>(.*?)</h1>" , flags=re.I)obj = pattern.search(strvar)print(obj.group())# re.M 使每一行都能够单独匹配(多行匹配),影响 ^ 和 $"""单行独立匹配,而不是整体匹配"""strvar = """<p>111</p><a>222</a><strong>333</strong>"""pattern = re.compile("^<.*?>(?:.*?)<.*?>$" , flags=re.M)lst = pattern.findall(strvar)print(lst)# re.S 使 . 匹配包括换行在内的所有字符strvar = """givesdfsdfmefive"""# 多个修饰符一起使用通过|拼接pattern = re.compile(".*?mefive" , flags = re.S|re.I|re.M )obj = pattern.search(strvar)print(obj.group())

小提示:

爬虫爬数据的时候用finditer,数据太大,用迭代器存strvar = """<p>111</p><a>222</a><strong>333</strong>"""pattern = re.compile("^<.*?>(?:.*?)<.*?>$")lst = pattern.findall(strvar)print(lst) # 这里的结果为[] 因为.不匹配换行符,所以不会返回结果pattern = re.compile("^<.*?>(?:.*?)<.*?>$",flags=re.M) 这里就是一行的一行的匹配了不会用for i in找思路 不会用.*?找思路

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注51zixue.net的更多内容!


详解Python的函数与异常
Python全栈之正则表达式
万事OK自学网:51自学网_软件自学网_CAD自学网自学excel、自学PS、自学CAD、自学C语言、自学css3实例,是一个通过网络自主学习工作技能的自学平台,网友喜欢的软件自学网站。