最简单的查找替换

在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中查找和替换文本相关推荐

  1. python字符串说法错误的是_以下选项中,关于Python字符串的描述错误的

    以下选项中,关于Python字符串的描述错误的 答:Python字符串提供区间访问方式,采用[N:M]格式,表示字符串中从N到M的索引子字符串(包含N和M) 寒武纪生物大爆发的原因可能是 答:间断平衡 ...

  2. python 字符串排序 偶数位交换_在Python中将字符串列表转换为整数排序列表

    当我们必须处理以字符串表示的数字时,使用python分析数据可以为我们带来情景.在本文中,我们将获取一个列表,其中包含以字符串形式出现的数字,我们需要将其转换为整数,然后以排序方式表示它们. 带图和排 ...

  3. java 查找大写字母_在Java中查找字符串的所有大写字母

    因此,我试图在用户输入的字符串中查找所有大写字母,但始终出现此运行时错误: Exception in thread "main" java.lang.StringIndexOutO ...

  4. python字符串描述错误的是_以下选项中,关于Python,字符串的描述错误的是

    以下选项中,关于Python,字符串的描述错误的是 答:Python字符串的切片方式是[N,M],不包括M 从<花>这首诗中,第三种个性是什么样的? 答:不能当机立 喜欢抱怨 杨氏模量大, ...

  5. 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 ...

  6. python字符串界定符有哪些_【Python 秘籍】使用多个界定符分割字符串

    问题 你需要将一个字符串分割为多个字段,但是分隔符 (还有周围的空格) 并不是固定的. 解决方案 string 对象的 split() 方法只适应于非常简单的字符串分割情形, 它并不允许有多个分隔符或 ...

  7. 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 ...

  8. [算法]LeetCode 专题 -- 二分查找专题 34. 在排序数组中查找元素的第一个和最后一个位置

    LeetCode 专题 – 二分查找专题 34. 在排序数组中查找元素的第一个和最后一个位置 难度:中等 题目描述 给定一个按照升序排列的整数数组 nums,和一个目标值 target.找出给定目标值 ...

  9. python字符串与列表与运算_[Python学习笔记1]Python语言基础 数学运算符 字符串 列表...

    这个系列是我在学习Python语言的过程中记录的笔记,主要是一些知识点汇总,而非学习教程,可供有一定编程基础者参考.文中偏见和不足难以避免,仅供参考,欢迎批评指正. 本系列笔记主要参考文献是官网文档: ...

最新文章

  1. python培训深圳-深圳哪里有Python培训?
  2. 功能测试——医疗管理系统
  3. OpenCV中GPU模块使用
  4. python中的date的含义_python中date、datetime、string的相互转换
  5. Qt笔记-桌面应用程序加载字体库(ttf)
  6. 任务完成从不加班_我如何从不知道如何编码转变为在9个月内交付9个项目-都在我15岁之前就完成了……...
  7. feign调用多个服务_SpringCloud使用Feign实现服务调用|chu
  8. 《中国人工智能学会通讯》——11.10 点云局部特征描述子基准评估体系
  9. 安装QTP10.0 报需要先安装 c++组件
  10. Android studio 真机调试出现sdk版本不匹配问题
  11. 让更多的开发者听到您的声音,移动开发征文活动现已开始 | 开发者说·DTalk
  12. 揭秘当下最主流的的7个app推广渠道及其不为人知的秘密
  13. 【如何快速搭建企业级的WAF防火墙】
  14. 单片机——神奇的中断嵌套实验
  15. iPhone破解相关知识
  16. C游戏编程入门第一讲心得
  17. 旅游网站如何根据游客决策过程去做营销?
  18. 如何选择合适的渗压计?
  19. 华联股份:范本式改造,BHG Mall全新升级开辟商业新契机
  20. 蓝桥杯31天冲刺之二十三 [java]

热门文章

  1. NVIDIA显卡高性能模式设置
  2. mysql 长度为0是什么意思_mysql中为int设置长度究竟是什么意思
  3. 广本汽车销售系统项目总结(.NET MVC)
  4. Laravel+ Vue+实现 + 三级联动!!!
  5. 递归神经网络RNN——LSTM
  6. 解决Java时间戳转换成时间之后一直显示1970年的原因
  7. Distilling the Knowledge in a Neural Network阅读笔记
  8. xmind思维导图文件如何不下载任何软件进行查看
  9. 我在京东怎么做运营——电商思维下的产品运营及管理
  10. camera 照相机 摄像机