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构造icmp echo请求和实现网络探测器功能代码分享
Jan 10 Python
总结Python编程中三条常用的技巧
May 11 Python
在Django的模型和公用函数中使用惰性翻译对象
Jul 27 Python
简析Python的闭包和装饰器
Feb 26 Python
Python实现SSH远程登陆,并执行命令的方法(分享)
May 08 Python
Python 爬虫之超链接 url中含有中文出错及解决办法
Aug 03 Python
浅谈Python traceback的优雅处理
Aug 31 Python
Python3 安装PyQt5及exe打包图文教程
Jan 08 Python
关于numpy数组轴的使用详解
Dec 05 Python
解决python pandas读取excel中多个不同sheet表格存在的问题
Jul 14 Python
Python持续监听文件变化代码实例
Jul 22 Python
详细总结Python常见的安全问题
May 21 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结合ajax实现赞、顶、踩功能实例
2014/05/12 PHP
19个Android常用工具类汇总
2014/12/30 PHP
php使用mysqli向数据库添加数据的方法
2015/03/20 PHP
PHP之浮点数计算比较以及取整数不准确的解决办法
2015/07/29 PHP
PHP模板引擎Smarty之配置文件在模板变量中的使用方法示例
2016/04/11 PHP
Code:loadScript( )加载js的功能函数
2007/02/02 Javascript
Mootools 图片展示插件(lightbox,ImageMenu)收集集合
2010/05/21 Javascript
如何确保JavaScript的执行顺序 之实战篇
2011/03/03 Javascript
关于html+ashx开发中几个问题的解决方法
2011/07/18 Javascript
Javascript的数组与字典用法与遍历对象的属性技巧
2012/11/07 Javascript
jquery zTree异步加载简单实例分享
2013/02/05 Javascript
JavaScript 垃圾回收机制分析
2013/10/10 Javascript
对 jQuery 中 data 方法的误解分析
2014/06/18 Javascript
JS实现的4种数字千位符格式化方法分享
2015/03/02 Javascript
JavaScript小技巧整理篇(非常全)
2016/01/26 Javascript
jQuery Ajax 实例代码 ($.ajax、$.post、$.get)
2016/04/29 Javascript
Bootstrap基本插件学习笔记之折叠(22)
2016/12/08 Javascript
Vue DevTools调试工具的使用
2017/12/05 Javascript
浅谈Vue的响应式原理
2019/05/30 Javascript
vue 解决setTimeOut和setInterval函数无效报错的问题
2020/07/30 Javascript
vue 保留两位小数 不能直接用toFixed(2) 的解决
2020/08/07 Javascript
vue+swiper实现左右滑动的测试题功能
2020/10/30 Javascript
[07:09]2014DOTA2国际邀请赛-Newbee再次发威成功晋级决赛
2014/07/19 DOTA
[25:45]2018DOTA2亚洲邀请赛4.5SOLO赛 Sylar vs Paparazi
2018/04/06 DOTA
python client使用http post 到server端的代码
2013/02/10 Python
python中的字典详细介绍
2014/09/18 Python
python面向对象入门教程之从代码复用开始(一)
2018/12/11 Python
用python求一个数组的和与平均值的实现方法
2019/06/29 Python
Python求解正态分布置信区间教程
2019/11/20 Python
关于iframe跨域使用postMessage的实现
2019/10/29 HTML / CSS
李维斯法国官网:Levi’s法国
2019/07/13 全球购物
电气工程及其自动化自我评价四篇
2013/09/24 职场文书
教师个人的自我评价分享
2014/01/02 职场文书
雷人标语集锦
2014/06/19 职场文书
三年级学生期末评语
2014/12/26 职场文书
成品仓管员岗位职责
2015/04/01 职场文书