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次


#贪婪匹配和惰性匹配
.* 贪婪匹配
.*? 惰性匹配
View Code
复制代码

在线正则表达式测试

给匹配到的想要的内容起别名group()  --> groupdict()  csv文件创建使用

复制代码
obj=re.compile(r'<li>.*?<div class="pic">.*?<span class="title">(?P<name>.*?)</span>.*?<p.*?<br>.*?(?P<years>.*?)&nbsp',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() #打开的文件关掉
View Code
复制代码

匹配一些特殊的东西(汉字、数字、大小写字母等的unicode范围)

正则表达式 - 去掉乱码字符/提取字符串中的中文字符/提取字符串中的大小写字母 - Python代码

 

 

 

obj=re.compile(r'<li>.*?<div class="pic">.*?<span class="title">(?P<name>.*?)</span>.*?<p.*?<br>.*?(?P<years>.*?)&nbsp',re.S)
#re.S顿时有了作用

  

 

posted @   磕伴  阅读(84)  评论(0编辑  收藏  举报
编辑推荐:
· 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应用必不可少的技术
点击右上角即可分享
微信分享提示