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 sys.path详细介绍
Oct 17 Python
python快速查找算法应用实例
Sep 26 Python
探寻python多线程ctrl+c退出问题解决方案
Oct 23 Python
用python实现简单EXCEL数据统计的实例
Jan 24 Python
python读取LMDB中图像的方法
Jul 02 Python
python实现事件驱动
Nov 21 Python
Python 获取中文字拼音首个字母的方法
Nov 28 Python
解决Python中定时任务线程无法自动退出的问题
Feb 18 Python
tesserocr与pytesseract模块的使用方法解析
Aug 30 Python
PyQt5实现仿QQ贴边隐藏功能的实例代码
May 24 Python
使用Djongo模块在Django中使用MongoDB数据库
Jun 20 Python
Python3.8官网文档之类的基础语法阅读
Sep 04 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邮件类
2007/01/03 PHP
理解和运用PHP中的多态性[译]
2011/08/02 PHP
php自动识别文件编码并转换为UTF-8的方法
2014/06/12 PHP
php中convert_uuencode()与convert_uuencode函数用法实例
2014/11/22 PHP
PHP开发中解决并发问题的几种实现方法分析
2017/11/13 PHP
jquery复选框CHECKBOX全选、反选
2008/08/30 Javascript
JS动态添加option和删除option(附实例代码)
2013/04/01 Javascript
js Dialog 去掉右上角的X关闭功能
2014/04/23 Javascript
JavaScript数组Array对象增加和删除元素方法总结
2015/01/20 Javascript
JS+CSS实现自动改变切换方向图片幻灯切换效果的方法
2015/03/02 Javascript
举例讲解AngularJS中的模块
2015/06/17 Javascript
react.js使用webpack搭配环境的入门教程
2017/08/14 Javascript
基于Vue制作组织架构树组件
2017/12/06 Javascript
JS关于刷新页面的相关总结
2018/05/09 Javascript
vue计算属性computed、事件、监听器watch的使用讲解
2019/01/21 Javascript
python分析nignx访问日志脚本分享
2015/02/26 Python
Python去除字符串两端空格的方法
2015/05/21 Python
Python中文件的读取和写入操作
2018/04/27 Python
python文件转为exe文件的方法及用法详解
2019/07/08 Python
Django组件content-type使用方法详解
2019/07/19 Python
python原类、类的创建过程与方法详解
2019/07/19 Python
Python流程控制 while循环实现解析
2019/09/02 Python
Python操作Jira库常用方法解析
2020/04/10 Python
使用python画出逻辑斯蒂映射(logistic map)中的分叉图案例
2020/12/11 Python
威盛公司软件C++工程师笔试题面试题
2012/07/16 面试题
UNIX文件系统常用命令
2012/05/25 面试题
资料员的岗位职责
2013/11/20 职场文书
学生党员思想汇报
2013/12/28 职场文书
个人课题方案
2014/05/08 职场文书
授权委托书范文
2014/07/31 职场文书
2014年机关党建工作总结
2014/11/11 职场文书
承诺书范本大全
2015/05/04 职场文书
2015年全国助残日活动方案
2015/05/04 职场文书
2019年个人工作总结范文(3篇)
2019/08/27 职场文书
Mysql索引失效 数据库表中有索引还是查询很慢
2022/05/15 MySQL
使用Postman测试需要授权的接口问题
2022/06/21 Java/Android