python字符串之查找与替换_在Python中查找和替换文本
最简单的查找替换
在Python中查找和替换非常简单,如果当前对象是一个字符串str时,你可以使用该类型提供的find()或者index()方法查找指定的字符,如果能找到则会返回字符第一次出现的索引,如果不存在则返回-1。
>>> s = 'Cat and Dog'
>>> s.find('Dog')
8
>>> s.index('Dog')
8
>>> s.find('Duck')
-1
如果要替换目标字符串,用replace()方法就好了。
>>> s = 'Cat and Dog'
>>> s.replace('Cat', 'Dog')
'Dog and Dog'
通配符查找匹配
当然,如果你觉得上面的功能还不能满足你,你想使用通配符来查找字符串?没问题!fnmatch这个库就能满足你的要求,看例子!
>>> s = 'Cat and Dog'
>>> import fnmatch
>>> fnmatch.fnmatch(s,'Cat*')
True
>>> fnmatch.fnmatch(s,'C*and*D?')
False
>>> fnmatch.fnmatch(s,'C*and*D*')
True
正则表达式查找替换
如果你需要查找比较复杂的字符规则,正则表达式是你不二的选择。下面是正则查找的简单示例。
>>> import re
>>> s = 'We will fly to Thailand on 2016/10/31'
>>> pattern = r'\d+'
>>> re.findall(pattern, s)
['2016', '10', '31']
>>> re.search(pattern, s)
>>> re.search(pattern, s).group()
'2016'
接下来你可能需要用正则表达式去替换某些字符,那么你需要了解re.sub()方法,看例子。
>>> s = "I like {color} car."
>>> re.sub(r'\{color\}','blue',s)
'I like blue car.'
>>> s = 'We will fly to Thailand on 10/31/2016'
>>> re.sub('(\d+)/(\d+)/(\d+)', r'\3-\1-\2', s)
'We will fly to Thailand on 2016-10-31'
其实re.sub()远比你相像的强大的多。在上面的例子里你可以替换类似于{color}这样的模板字符,也可以把正则匹配到的所有分组调换顺序,例如第二个例子一共匹配了3个分组,然后把第3个分组放到最前面 r'3-1-2',看明白了吗?
接下来看另外一个例子。
s = "Tom is talking to Jerry."
name1 = "Tom"
name2 = "Jerry"
pattern = r'(.*)({0})(.*)({1})(.*)'.format(name1, name2)
print re.sub(pattern, r'\1\4\3\2\5', s)
# Jerry is talking to Tom.
其实你还可以自定义替换函数,也就是re.sub()的第二个参数。
def change_date(m):
from calendar import month_abbr
mon_name = month_abbr[int(m.group(1))]
return '{} {} {}'.format(m.group(2), mon_name, m.group(3))
s = 'We will fly to Thailand on 10/31/2016'
pattern = r'(\d+)/(\d+)/(\d+)'
print re.sub(pattern, change_date, s)
# We will fly to Thailand on 31 Oct 2016
最后给大家一个终极版的例子,里面用到了函数的闭包,着酸爽,你懂的!
def match_case(word):
def replace(m):
text = m.group()
if text.isupper():
return word.upper()
elif text.islower():
return word.lower()
elif text[0].isupper():
return word.capitalize()
else:
return word
return replace
s = "LOVE PYTHON, love python, Love Python"
print re.sub('python', match_case('money'), s, flags=re.IGNORECASE)
# LOVE MONEY, love money, Love Money
写在最后
其实正则表达式还有很多玩法,如果你想让正则和通配符混合着用,一点问题都没有,因为fnmatch还有一个translate()的方法,可以让你把通配符无痛转换成正则表达式,你爱怎么玩就怎么玩。
>>> fnmatch.translate('C*and*D*')
'C.*and.*D.*'
关于作者:Python技术爱好者,目前从事测试开发相关工作,转载请注明原文出处。
欢迎关注我的博客 http://betacat.online,你可以到我的公众号中去当吃瓜群众。
python字符串之查找与替换_在Python中查找和替换文本相关推荐
- python字符串说法错误的是_以下选项中,关于Python字符串的描述错误的
以下选项中,关于Python字符串的描述错误的 答:Python字符串提供区间访问方式,采用[N:M]格式,表示字符串中从N到M的索引子字符串(包含N和M) 寒武纪生物大爆发的原因可能是 答:间断平衡 ...
- python 字符串排序 偶数位交换_在Python中将字符串列表转换为整数排序列表
当我们必须处理以字符串表示的数字时,使用python分析数据可以为我们带来情景.在本文中,我们将获取一个列表,其中包含以字符串形式出现的数字,我们需要将其转换为整数,然后以排序方式表示它们. 带图和排 ...
- java 查找大写字母_在Java中查找字符串的所有大写字母
因此,我试图在用户输入的字符串中查找所有大写字母,但始终出现此运行时错误: Exception in thread "main" java.lang.StringIndexOutO ...
- python字符串描述错误的是_以下选项中,关于Python,字符串的描述错误的是
以下选项中,关于Python,字符串的描述错误的是 答:Python字符串的切片方式是[N,M],不包括M 从<花>这首诗中,第三种个性是什么样的? 答:不能当机立 喜欢抱怨 杨氏模量大, ...
- python字符串前面去两位_在Python 3中删除字符串文字前面的'b'字符do
I am new in python programming and i am a bit confused. I try to get the bytes from a string to hash ...
- python字符串界定符有哪些_【Python 秘籍】使用多个界定符分割字符串
问题 你需要将一个字符串分割为多个字段,但是分隔符 (还有周围的空格) 并不是固定的. 解决方案 string 对象的 split() 方法只适应于非常简单的字符串分割情形, 它并不允许有多个分隔符或 ...
- ad09只在一定范围内查找相似对象_在AD09中查找元件和封装
1206 1/4W 电容电阻外形尺寸与封装的对应关系是: 0402=1.0x0.5 0603=1.6x0.8 0805=2.0x1.2 1206=3.2x1.6 1210=3.2x2.5 1812=4 ...
- [算法]LeetCode 专题 -- 二分查找专题 34. 在排序数组中查找元素的第一个和最后一个位置
LeetCode 专题 – 二分查找专题 34. 在排序数组中查找元素的第一个和最后一个位置 难度:中等 题目描述 给定一个按照升序排列的整数数组 nums,和一个目标值 target.找出给定目标值 ...
- python字符串与列表与运算_[Python学习笔记1]Python语言基础 数学运算符 字符串 列表...
这个系列是我在学习Python语言的过程中记录的笔记,主要是一些知识点汇总,而非学习教程,可供有一定编程基础者参考.文中偏见和不足难以避免,仅供参考,欢迎批评指正. 本系列笔记主要参考文献是官网文档: ...
最新文章
- python培训深圳-深圳哪里有Python培训?
- 功能测试——医疗管理系统
- OpenCV中GPU模块使用
- python中的date的含义_python中date、datetime、string的相互转换
- Qt笔记-桌面应用程序加载字体库(ttf)
- 任务完成从不加班_我如何从不知道如何编码转变为在9个月内交付9个项目-都在我15岁之前就完成了……...
- feign调用多个服务_SpringCloud使用Feign实现服务调用|chu
- 《中国人工智能学会通讯》——11.10 点云局部特征描述子基准评估体系
- 安装QTP10.0 报需要先安装 c++组件
- Android studio 真机调试出现sdk版本不匹配问题
- 让更多的开发者听到您的声音,移动开发征文活动现已开始 | 开发者说·DTalk
- 揭秘当下最主流的的7个app推广渠道及其不为人知的秘密
- 【如何快速搭建企业级的WAF防火墙】
- 单片机——神奇的中断嵌套实验
- iPhone破解相关知识
- C游戏编程入门第一讲心得
- 旅游网站如何根据游客决策过程去做营销?
- 如何选择合适的渗压计?
- 华联股份:范本式改造,BHG Mall全新升级开辟商业新契机
- 蓝桥杯31天冲刺之二十三 [java]
热门文章
- NVIDIA显卡高性能模式设置
- mysql 长度为0是什么意思_mysql中为int设置长度究竟是什么意思
- 广本汽车销售系统项目总结(.NET MVC)
- Laravel+ Vue+实现 + 三级联动!!!
- 递归神经网络RNN——LSTM
- 解决Java时间戳转换成时间之后一直显示1970年的原因
- Distilling the Knowledge in a Neural Network阅读笔记
- xmind思维导图文件如何不下载任何软件进行查看
- 我在京东怎么做运营——电商思维下的产品运营及管理
- camera 照相机 摄像机