Python字符串及文本模式方法详解


Posted in Python onSeptember 10, 2020

一、你想在字符串中搜索和匹配指定的文本模式

遗漏点:re模块其实也是帮助我们进行字符串处理的重要工具,我之前总是想着用内建的函数来处理,其实如果是复杂的文本和数据结构,re模块能帮助我们处理很多信息。

对于简单的字面模式,直接使用 str.replace() 方法即可,比如:

>>> text = 'yeah, but no, but yeah, but no, but yeah'
>>> text.replace('yeah', 'yep')
'yep, but no, but yep, but no, but yep'
>>>

对于复杂的模式,请使用 re 模块中的 sub() 函数。 为了说明这个,假设你想将形式为 11/27/2012 的日期字符串改成 2012-11-27 。示例如下:

>>> text = 'Today is 11/27/2012. PyCon starts 3/13/2013.'
>>> import re
>>> re.sub(r'(\d+)/(\d+)/(\d+)', r'\3-\1-\2', text)
'Today is 2012-11-27. PyCon starts 2013-3-13.'

二、你需要以忽略大小写的方式搜索与替换文本字符串

为了在文本操作时忽略大小写,你需要在使用 re 模块的时候给这些操作提供 re.IGNORECASE 标志参数。比如:

>>> text = 'UPPER PYTHON, lower python, Mixed Python'
>>> re.findall('python', text, flags=re.IGNORECASE)
['PYTHON', 'python', 'Python']
>>> re.sub('python', 'snake', text, flags=re.IGNORECASE)
'UPPER snake, lower snake, Mixed snake'

最后的那个例子揭示了一个小缺陷,替换字符串并不会自动跟被匹配字符串的大小写保持一致。 为了修复这个,你可能需要一个辅助函数,就像下面的这样:

def matchcase(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

>>> re.sub('python', matchcase('snake'), text, flags=re.IGNORECASE)
'UPPER SNAKE, lower snake, Mixed Snake'

matchcase('snake') 返回了一个回调函数(参数必须是 match 对象),sub() 函数除了接受替换字符串外,还能接受一个回调函数。

三、你正在试着使用正则表达式去匹配一大块的文本,而你需要跨越多行去匹配

>>> comment = re.compile(r'/\*(.*?)\*/')
>>> text1 = '/* this is a comment */'
>>> text2 = '''/* this is a
... multiline comment */
... '''
>>>
>>> comment.findall(text1)
[' this is a comment ']
>>> comment.findall(text2)

re.compile() 函数接受一个标志参数叫 re.DOTALL ,在这里非常有用。 它可以让正则表达式中的点(.)匹配包括换行符在内的任意字符。比如:

>>> comment = re.compile(r'/\*(.*?)\*/', re.DOTALL)
>>> comment.findall(text2)
[' this is a\n multiline comment '] 

四、你想通过某种对齐方式来格式化字符串

于基本的字符串对齐操作,可以使用字符串的 ljust() , rjust() 和 center() 方法。比如:

>>> text = 'Hello World'
>>> text.ljust(20)
'Hello World '
>>> text.rjust(20)
' Hello World'
>>> text.center(20)
' Hello World '
>>> text.rjust(20,'=')
'=========Hello World'
>>> text.center(20,'*')
'****Hello World*****'
>>>

函数 format() 同样可以用来很容易的对齐字符串。 你要做的就是使用 <,> 或者 ^ 字符后面紧跟一个指定的宽度。比如:

>>> format(text, '>20')
' Hello World'
>>> format(text, '<20')
'Hello World '
>>> format(text, '^20')
' Hello World '
>>>

如果你想指定一个非空格的填充字符,将它写到对齐字符的前面即可:

>>> format(text, '=>20s')
'=========Hello World'
>>> format(text, '*^20s')
'****Hello World*****'
>>>

当格式化多个值的时候,这些格式代码也可以被用在 format() 方法中。比如:

>>> x = 1.2345
>>> format(x, '>10')
' 1.2345'
>>> format(x, '^10.2f')
' 1.23 '
>>>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
初学Python实用技巧两则
Aug 29 Python
Python随机生成彩票号码的方法
Mar 05 Python
整理Python中的赋值运算符
May 13 Python
PYTHON 中使用 GLOBAL引发的一系列问题
Oct 12 Python
Python如何为图片添加水印
Nov 25 Python
详解python单元测试框架unittest
Jul 02 Python
Python 单元测试(unittest)的使用小结
Nov 14 Python
python下载微信公众号相关文章
Feb 26 Python
梅尔倒谱系数(MFCC)实现
Jun 19 Python
Python Django Cookie 简单用法解析
Aug 13 Python
Python内置类型性能分析过程实例
Jan 29 Python
详解基于Facecognition+Opencv快速搭建人脸识别及跟踪应用
Jan 21 Python
python raise的基本使用
Sep 10 #Python
Python常用数字处理基本操作汇总
Sep 10 #Python
Python通用唯一标识符uuid模块使用案例
Sep 10 #Python
Python编写单元测试代码实例
Sep 10 #Python
python super()函数的基本使用
Sep 10 #Python
Python如何实现机器人聊天
Sep 10 #Python
Python 必须了解的5种高级特征
Sep 10 #Python
You might like
PHP实现的封装验证码类详解
2013/06/18 PHP
jQuery 1.0.2
2006/10/11 Javascript
javascript getElementsByClassName实现代码
2010/10/11 Javascript
javascript真的不难-回顾一下基础知识
2013/01/15 Javascript
JavaScript简单实现网页回到顶部功能
2013/11/12 Javascript
自己使用js/jquery写的一个定制对话框控件
2014/05/02 Javascript
javascript实现类似百度分享功能的方法
2015/07/27 Javascript
js中 计算两个日期间的工作日的简单实例
2016/08/08 Javascript
jQuery学习笔记——jqGrid的使用记录(实现分页、搜索功能)
2016/11/09 Javascript
js实现倒计时及时间对象
2016/11/15 Javascript
vue子组件使用自定义事件向父组件传递数据
2017/05/27 Javascript
jQuery使用ajax_动力节点Java学院整理
2017/07/05 jQuery
深入了解javascript 数组的sort方法
2018/06/01 Javascript
Angular服务Request异步请求的实例讲解
2018/08/13 Javascript
详解微信小程序调用支付接口支付
2019/04/28 Javascript
8个有意思的JavaScript面试题
2019/07/30 Javascript
[01:55]《走出家门看比赛》——DOTA2 2015国际邀请赛同城线下观战
2015/07/18 DOTA
Python内置函数dir详解
2015/04/14 Python
浅谈python中截取字符函数strip,lstrip,rstrip
2015/07/17 Python
python基于itchat实现微信群消息同步机器人
2017/02/27 Python
Python中enumerate函数代码解析
2017/10/31 Python
python+matplotlib绘制旋转椭圆实例代码
2018/01/12 Python
python pandas 对series和dataframe的重置索引reindex方法
2018/06/07 Python
Python实现获取邮箱内容并解析的方法示例
2018/06/16 Python
Django实战之用户认证(初始配置)
2018/07/16 Python
基于DataFrame改变列类型的方法
2018/07/25 Python
PyCharm 创建指定版本的 Django(超详图解教程)
2019/06/18 Python
python命令行参数用法实例分析
2019/06/25 Python
python之信息加密题目详解
2019/06/26 Python
pytorch多进程加速及代码优化方法
2019/08/19 Python
Python叠加矩形框图层2种方法及效果
2020/06/18 Python
全球立体声:World Wide Stereo
2018/09/29 全球购物
建筑班组长岗位职责
2014/01/02 职场文书
2016年元旦致辞
2015/08/01 职场文书
Python爬虫数据的分类及json数据使用小结
2021/03/29 Python
浅谈Python响应式类库RxPy
2021/06/14 Python