re
import re #findall匹配字符串中所有的符合正则的内容【返回列表】 list=re.findall(r'\d+','我的电话号码:10085,女女电话号:587744') #正则前面加个r 有益无害 print('findall',list) #finditer:匹配字符串中所有的内容【返回迭代器(效率高)】,从中拿内容.group() it=re.finditer(r'\d+','我的电话号码:10085,女女电话号:587744') print(it) for i in it: print('finditer',i.group())#拿到返回的内容 #search,找到一个结果就返回 ,是match对象,拿内容用.group() it=re.search(r'\d+','我的电话号码:10085,女女电话号:587744') print('search',it.group()) #match从头匹配一个(上面的都是全文匹配),开头匹配不到就为空(None) it=re.match(r'\d+','10085,女女电话号:587744') print('match',it.group()) # compile预加载正则表达式,速度快,可重复用 obj=re.compile(r'\d+') ret=obj.finditer('我的电话号码:10085,女女电话号:587744') for i in ret: print(i.group())#拿到返回的内容 #sub替换 data='������Z�� (���6ae9274e:下次丕定@���b51199575929651205p����' string_code = re.sub(r"([^\u4e00-\u9fa5])","",data) print(string_code ) 表面上是替换所有汉字为空,实际上通过()保留匹配的汉字 ^ 匹配字符串的开始 (必要)
常用正则表达的元字符、量词、贪婪匹配+惰性匹配

#元字符: 具有固定含义的特殊符号 常⽤元字符: . 匹配除换⾏符以外的任意字符 \w 匹配字⺟或数字或下划线 \s 匹配任意的空⽩符 \d 匹配数字 \n 匹配⼀个换⾏符 \t 匹配⼀个制表符 ^ 匹配字符串的开始 $ 匹配字符串的结尾 \W 匹配⾮字⺟或数字或下划线 \D 匹配⾮数字 \S 匹配⾮空⽩符 a|b 匹配字符a或字符b () 匹配括号内的表达式,也表示⼀个组 [...] 匹配字符组中的字符 [^...] 匹配除了字符组中字符的所有字符 # re.sub(r"([^\u4e00-\u9fa5])","",data) #匹配date里面除了汉字的所有字符,将他们替换成空 #量词: 控制前⾯的元字符出现的次数 * 重复零次或更多次 + 重复⼀次或更多次 ? 重复零次或⼀次 {n} 重复n次 {n,} 重复n次或更多次 {n,m} 重复n到m次 #贪婪匹配和惰性匹配 .* 贪婪匹配 .*? 惰性匹配
给匹配到的想要的内容起别名group() --> groupdict() csv文件创建使用

obj=re.compile(r'<li>.*?<div class="pic">.*?<span class="title">(?P<name>.*?)</span>.*?<p.*?<br>.*?(?P<years>.*?) ',re.S) #compile预加载 result=obj.finditer(page_content) f=open("csv/top250.csv", mode='w', encoding='utf-8') csvwriter=csv.writer(f) #创建一个写的对象 for i in result: # print(i.group('name')) # print(i.group('years').strip()) #去除多余空白 dic=i.groupdict() #groupdict()它返回一个字典,键名是起的名字,键值是匹配到的值 dic['years']=dic['years'].strip() csvwriter.writerow(dic.values()) #写入dic字典的values f.close() #打开的文件关掉
匹配一些特殊的东西(汉字、数字、大小写字母等的unicode范围)
正则表达式 - 去掉乱码字符/提取字符串中的中文字符/提取字符串中的大小写字母 - Python代码
obj=re.compile(r'<li>.*?<div class="pic">.*?<span class="title">(?P<name>.*?)</span>.*?<p.*?<br>.*?(?P<years>.*?) ',re.S) #re.S顿时有了作用
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决
· 提示词工程——AI应用必不可少的技术