re 模块的重新整理
2024-09-05 03:47:30
RE模块
import re 的常用操作
查找
1. findall :
ret = re.findall('\d+'.'sjkhk172按实际花费928') #正则表达式,待匹配的字符串,flag # ['172', '928'] ret = re.findall('\d'.'sjkhk172按实际花费928') #正则表达式,待匹配的字符串,flag
#['1', '7', '2', '9', '2', '8']
2. search:
ret = re.search('\d+','sjkhk172按实际花费928') print(ret)
#<_sre.SRE_Match object; span=(5, 8), match='172'>
#内存地址,这是一个正则匹配的结果 print(ret.group())
#
3. match :
ret = re.match('\d+','sjkhk172按实际花费928')
print(re.group())
#
这是字符串处理的拓展:替换.切割
split (正则表达式,切个对象)
返回列表,按照正则规则切割,默认匹配到的内容会被切掉
s = 'eagle22wolf55fox99'
ret = re.split('\d+',s) #正则表达式,切个对象
print(ret) #['eagle','wolf','fox'] s = 'eagle22wolf55fox99'
ret = re.split('(\d+)',s) #正则表达式加小括号也打印切割部分
print(ret) #['eagle','22','wolf','55','fox',''99]
sub (旧的,新的,替换对象,替换次数(默认为所有))
替换 按照正则规则去寻找要被替换掉的内容
s = 'eagle22wolf55fox99'
ret = re.sub('\d+','H',s)
print(ret) #eagleHwolfHfoxH s = 'eagle22wolf55fox99'
ret = re.sub('\d+','H',s,1) #次数为1
print(ret) #eagleHwolf55fox99
subn 返回一个元组,第二个元素是替换的次数
ret = re.subn('\d+','H','eagle22wolf55fox99')
print(ret) #('eagleHwolfHfoxH',3)
4.re模块的进阶 : 时间\空间
complie 节省你使用正则表达式解决问题的时间
编译一个正则表达式,用这个结果去search match findall finditer能够接受时间
把正则表达式 编译成 字节码
在多次的使用过程中,不会多次编译
ret = re.compile('\d+') #已经完成编译了
print(ret)
#re.complie('\\d+') res=ret.finall('eagle22fox88wolf11')
print(res)
# ['22','88'.'11'] rex = ret.search('sjkjk250只要九九八998')
print(rex.group())
#
finditer 节省你使用正则表达式解决问题的空间\内存
返回一个迭代器,所有的结果都在这个迭代器中,需要通过循环 +group的形式取值,能够节省内存
ret = re.finditer('\d+','eagle22wolf33fox99')
for i in ret:
print(i.group())
# 22 33 99
分组在re模块中的使用
关于分组:
对于正则表达式来说有些时候我们需要进行分组,来整体约束某一组字符出现的次数
(\.[\w]+)?
对于python语言来说分组可以帮助你更好更精准地找到你征正需要的内容
<(\w+)>(\w+)</(\w+)>
import re
s = '<a>wahaha</a>' #标签语言HTML网页
ret = re.search('<\w+>(\w+)</(\w+)>',s)
print(ret.group(0)) #所有的结果 <a>whahaha</a>
print(ret.group(1)) #从左到右第一个小括号中的内容数字参数代表的时去对应分组中的内容#a
print(ret.group(2)) #wahaha
print(ret.group(3)) #a
#为了findall 也可以顺利取到分组中的内容,有一个特殊的语法,就是优先显示分组中内容
import re s = '<a>wahaha</a>'
ret = re.findall('(\w+)',s)
print(ret)
#['a','wahaha','a'] ret = re.findall('>(\w+)<',s)
print(ret)
#['wahaha']
#取消分组优先(?:正则表达式)
ret = re.findall('(\d+)(\.\d+)?','1.341*3')
print(ret)
#[('1','.341'),('3','')]
#将小数和整数都优先,则会返回一个元组组成的列表
ret = re.findall('\d+(\.\d+)?','1.341*3')
print(ret)
#['.131','']
#默认会先取后面分组的
ret = re.findall('\d+(?:\.\d+)?','1.341*3')
print(ret)
#['1.131','3']
#取消分组优先
python和正则表达式之间的特殊的约定
#分组命名(?P<这个组的名字>)正则表达式
s='<a>wahaha</a>'
ret = re.search('>(?P<con>\w+)<',s)
print(ret.group(1)) #wahaha
print(ret.group('con')) #wahaha #使用前面的分组要求使用这个名字的分组和前面同名分组中的内容匹配的必须一致 方法一:
s='<a>wahaha</a>'
func = '<(\w+)>(\w+)<(\w+)>'
ret = re.search(func,s)
print(ret.group(1)==ret.group(3))
#无ret,正则没有抓到东西 方法二:
func = '<(?P<tab>\w+)>(\w+)</(?P=tab)>'
ret = re.search(func,s)
print(ret.group)
#<a>wahaha</a>
最新文章
- 2016huasacm暑假集训训练五 J - Max Sum
- sizzle分析记录:关于querySelectorAll兼容问题
- git 较基础命令
- android studio中the logging tag can be most 23 characters
- JavaScript事件大全3
- Leetcode#137 Single Number II
- UVa 817 According to Bartjens (暴力,DFS)
- SnappyDB—Android上的NoSQL数据库简介
- Foursquare 8.0 :聪明人给互联网公司上的流量转化课
- 多线程异步编程示例和实践-Task
- OS X升级到10.11后Xcode6.4界面无iOS device选择栏的解决办法
- 一行命令更新所有 npm 依赖包
- 夜神模拟已开启,adb命令检测不了设备解决方法
- InetAddress问题
- BTrace使用小结
- PureComponent的作用及一些使用陷阱
- android 获取系统默认路径
- python中command执行shell命令脚本方法
- 基于VMware Workstation搭建开发服务器
- 【10.29校内测试】【线段树】【DP】【二进制Trie树求最小值最大】
热门文章
- 【Advanced Windows Phone Programming】在windows phone 8中解码mp3 和编码pcm
- Codeforces Beta Round #56 A. Where Are My Flakes? —— 贪心
- win8.1 保护眼睛的颜色设置
- CSS实现文字内容不被截断当超出指定长度时该字符串自动整体换到下一行
- groovy语言和grails框架
- webpack 基本功能和原理
- 关闭页面,window.onunload事件未执行的原因
- Snmp在Windows下的实现----WinSNMP编程原理
- ceph部署与问题
- ubuntu--vim 技巧