python中正则表达式的使用方法


Posted in Python onFebruary 25, 2018

本文主要关于python的正则表达式的符号与方法。

findall: 找寻所有匹配,返回所有组合的列表
search: 找寻第一个匹配并返回
sub: 替换符合规律的内容,并返回替换后的内容
.:匹配除了换行符以外的任意字符

a = 'xy123'
b = re.findall('x...',a)
print(b)
# ['xy12']

*:匹配前一个字符0次或者无限次

a = 'xyxy123'
b = re.findall('x*',a)
print(b)
# ['x', '', 'x', '', '', '', '', '']

?:匹配前一个字符0次或者1次

a = 'xy123'
b = re.findall('x?',a)
print(b)
# ['x', '', '', '', '', '']

.*:贪心算法

b = re.findall('xx.*xx',secret_code)
print(b)
# ['xxIxxfasdjifja134xxlovexx23345sdfxxyouxx']

.*?:非贪心算法

c = re.findall('xx.*?xx',secret_code)
print(c)
# ['xxIxx', 'xxlovexx', 'xxyouxx']

():括号内结果返回

d = re.findall('xx(.*?)xx',secret_code)
print(d)
for each in d:
  print(each)
# ['I', 'love', 'you']
# I
# love
# you

re.S使得.的作用域包括换行符”\n”

s = '''sdfxxhello
xxfsdfxxworldxxasdf'''

d = re.findall('xx(.*?)xx',s,re.S)
print(d)
# ['hello\n', 'world']

对比findall与search的区别

s2 = 'asdfxxIxx123xxlovexxdfd'
f = re.search('xx(.*?)xx123xx(.*?)xx',s2).group(2)
print(f)
f2 = re.findall('xx(.*?)xx123xx(.*?)xx',s2)
print(f2[0][1])
# love
# love

虽然两者结果相同,但是search是搭配group来得到第二个匹配,而findall的结果是[(‘I', ‘love')],包含元组的列表,所以需要f2[0][1]来引入。

sub的使用

s = '123rrrrr123'
output = re.sub('123(.*?)123','123%d123'%789,s)
print(output)
# 123789123

例如我们需要将文档中的所有的png图片改变路径,即需要找到所有的 .png 结尾,再将其都加上路径,

import re

def multiply(m):
  # Convert group 0 to an integer.
  v = m.group(0)
  print(v)
  # Multiply integer by 2.
  # ... Convert back into string and return it.
  print('basic/'+v)
  return 'basic/'+v

结果如下

>>>autoencoder.png
  basic/autoencoder.png
  RNN.png
  basic/RNN.png
  rnn_step_forward.png
  basic/rnn_step_forward.png
  rnns.png
  basic/rnns.png
  rnn_cell_backprop.png
  basic/rnn_cell_backprop.png
  LSTM.png
  basic/LSTM.png
  LSTM_rnn.png
  basic/LSTM_rnn.png
  attn_mechanism.png
  basic/attn_mechanism.png
  attn_model.png
  basic/attn_model.png

仿照上面案例,我们可以方便的对我们的任务进行定制。

subn相比sub,subn返回元组,第二个元素表示替换发生的次数:

import re

def add(m):
  # Convert.
  v = int(m.group(0))
  # Add 2.
  return str(v + 1)

# Call re.subn.
result = re.subn("\d+", add, "1 2 3 4 5")

print("Result string:", result[0])
print("Number of substitutions:", result[1])
>>>
Result string: 11 21 31 41 51
Number of substitutions: 5
Python 相关文章推荐
Python运行的17个时新手常见错误小结
Aug 07 Python
用Python解析XML的几种常见方法的介绍
Apr 09 Python
python itchat实现微信自动回复的示例代码
Aug 14 Python
python实现随机漫步算法
Aug 27 Python
10招!看骨灰级Pythoner玩转Python的方法
Apr 15 Python
OpenCV搞定腾讯滑块验证码的实现代码
May 18 Python
pyqt 多窗口之间的相互调用方法
Jun 19 Python
django框架面向对象ORM模型继承用法实例分析
Jul 29 Python
使用Python将Exception异常错误堆栈信息写入日志文件
Apr 08 Python
Win10用vscode打开anaconda环境中的python出错问题的解决
May 25 Python
Python读取二进制文件代码方法解析
Jun 22 Python
python中的sys模块和os模块
Mar 20 Python
python爬虫爬取淘宝商品信息(selenum+phontomjs)
Feb 24 #Python
python正则表达式爬取猫眼电影top100
Feb 24 #Python
python爬虫获取淘宝天猫商品详细参数
Jun 23 #Python
python按综合、销量排序抓取100页的淘宝商品列表信息
Feb 24 #Python
python2.7+selenium2实现淘宝滑块自动认证功能
Feb 24 #Python
Python 中Pickle库的使用详解
Feb 24 #Python
Python使用Selenium+BeautifulSoup爬取淘宝搜索页
Feb 24 #Python
You might like
德劲1107的电路分析与打磨
2021/03/02 无线电
php基础知识:类与对象(2) 自动加载对象
2006/12/13 PHP
从MySQL数据库表中取出随机数据的代码
2007/09/05 PHP
使用php语句将数据库*.sql文件导入数据库
2014/05/05 PHP
PHP实现将textarea的值根据回车换行拆分至数组
2015/06/10 PHP
PHP5.6读写excel表格文件操作示例
2019/02/26 PHP
如何简单地用YUI做JavaScript动画
2007/03/10 Javascript
JS delegate与live浅析
2013/12/21 Javascript
jquery右下角自动弹出可关闭的广告层
2015/05/08 Javascript
jquery常用函数与方法汇总
2015/09/01 Javascript
JavaScript人脸识别技术及脸部识别JavaScript类库Tracking.js
2015/09/14 Javascript
JS组件Bootstrap Table布局详解
2016/05/27 Javascript
JavaScript中如何使用cookie实现记住密码功能及cookie相关函数介绍
2016/11/10 Javascript
js中document.referrer实现移动端返回上一页
2017/02/22 Javascript
详谈js中标准for循环与foreach(for in)的区别
2017/11/02 Javascript
Angular浏览器插件Batarang介绍及使用
2018/02/07 Javascript
vue input输入框关键字筛选检索列表数据展示
2020/10/26 Javascript
JavaScript相等运算符的九条规则示例详解
2019/10/20 Javascript
Ant design vue table 单击行选中 勾选checkbox教程
2020/10/24 Javascript
[05:13]2018DOTA2亚洲邀请赛主赛事第二日战况回顾 LGD、VG双雄携手晋级
2018/04/05 DOTA
Python ljust rjust center输出
2008/09/06 Python
基于hashlib模块--加密(详解)
2017/06/21 Python
python将视频转换为全字符视频
2019/04/26 Python
使用IDLE的Python shell窗口实例详解
2019/11/19 Python
keras中的loss、optimizer、metrics用法
2020/06/15 Python
python3 中时间戳、时间、日期的转换和加减操作
2020/07/14 Python
CSS3 box-sizing属性详解
2016/11/15 HTML / CSS
苹果中国官方网站:Apple中国
2016/07/22 全球购物
Linux管理员面试经常问道的相关命令
2013/04/29 面试题
如何清空Session
2015/02/23 面试题
幼儿园教师考核制度
2014/02/01 职场文书
优秀共产党员先进事迹材料
2014/05/06 职场文书
党支部意见范文
2015/06/02 职场文书
JavaWeb 入门篇:创建Web项目,Idea配置tomcat
2021/07/16 Java/Android
sentinel支持的redis高可用集群配置详解
2022/04/01 Redis
MySQL 表锁定 LOCK和UNLOCK TABLES的 SQL语法
2022/04/18 MySQL