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 相关文章推荐
phpsir 开发 一个检测百度关键字网站排名的python 程序
Sep 17 Python
Python中的ConfigParser模块使用详解
May 04 Python
Python脚本处理空格的方法
Aug 08 Python
python Spyder界面无法打开的解决方法
Apr 27 Python
pygame游戏之旅 添加键盘按键的方法
Nov 20 Python
python 并发编程 多路复用IO模型详解
Aug 20 Python
在Tensorflow中实现梯度下降法更新参数值
Jan 23 Python
Tensorflow 实现释放内存
Feb 03 Python
Python3 pickle对象串行化代码实例解析
Mar 23 Python
django实现更改数据库某个字段以及字段段内数据
Mar 31 Python
完美解决keras保存好的model不能成功加载问题
Jun 11 Python
python 利用 PIL 将数组值转成图片的实现
Apr 12 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
php文件管理基本功能简单操作
2017/01/16 PHP
Extjs Ajax 乱码问题解决方案
2009/04/15 Javascript
ASP.NET MVC中EasyUI的datagrid跨域调用实现代码
2012/03/14 Javascript
基于JavaScript实现继承机制之构造函数+原型链混合方式的使用详解
2013/05/07 Javascript
禁止iframe脚本弹出的窗口覆盖了父窗口的方法
2014/09/06 Javascript
JavaScript中提前声明变量或函数例子
2014/11/12 Javascript
javascript如何写热点图
2015/12/08 Javascript
JS读写CSS样式的方法汇总
2016/08/16 Javascript
AngularJS动态加载模块和依赖的方法分析
2016/11/08 Javascript
bootstrap table插件的分页与checkbox使用详解
2017/07/23 Javascript
详解使用Visual Studio Code对Node.js进行断点调试
2017/09/14 Javascript
vue 动态修改a标签的样式的方法
2018/01/18 Javascript
nodejs实现套接字服务功能详解
2018/06/21 NodeJs
JS实现textarea通过换行或者回车把多行数字分割成数组并且去掉数组中空的值
2018/10/29 Javascript
JavaScript中Object、map、weakmap的区别分析
2020/12/15 Javascript
js实现鼠标拖曳效果
2020/12/30 Javascript
vue实现禁止浏览器记住密码功能的示例代码
2021/02/03 Vue.js
python使用PythonMagick将jpg图片转换成ico图片的方法
2015/03/26 Python
python嵌套字典比较值与取值的实现示例
2017/11/03 Python
python数字图像处理之骨架提取与分水岭算法
2018/04/27 Python
python单例设计模式实现解析
2020/01/07 Python
flask框架蓝图和子域名配置详解
2020/01/25 Python
Django 项目布局方法(值得推荐)
2020/03/22 Python
微信小程序“圣诞帽”的实现思路详解
2017/12/28 HTML / CSS
HTML5 body设置自适应全屏
2020/05/07 HTML / CSS
加拿大领先的优质厨具产品在线购物网站:Golda’s Kitchen
2017/11/17 全球购物
华为慧通面试题
2012/09/11 面试题
正规的求职信范文分享
2013/12/11 职场文书
培训楼经理岗位责任制
2014/02/10 职场文书
大学生2014全国两会学习心得体会
2014/03/10 职场文书
勤俭节约倡议书
2014/04/14 职场文书
2015年元旦演讲稿
2014/09/12 职场文书
2014年基层党建工作总结
2014/11/11 职场文书
国王的演讲观后感
2015/06/03 职场文书
Django实现翻页的示例代码
2021/05/24 Python
探究Mysql模糊查询是否区分大小写
2021/06/11 MySQL