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插入排序算法的实现代码
Nov 21 Python
Python常用模块用法分析
Sep 08 Python
浅谈python 里面的单下划线与双下划线的区别
Dec 01 Python
python代码实现ID3决策树算法
Dec 20 Python
Python中property属性实例解析
Feb 10 Python
使用Python的Dataframe取两列时间值相差一年的所有行方法
Jul 10 Python
Python中的取模运算方法
Nov 10 Python
python感知机实现代码
Jan 18 Python
Python操作rabbitMQ的示例代码
Mar 19 Python
Python 控制终端输出文字的实例
Jul 12 Python
Python Selenium 之数据驱动测试的实现
Aug 01 Python
Python自动重新加载模块详解(autoreload module)
Apr 01 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+Tidy-完美的XHTML纠错+过滤
2007/04/10 PHP
通用PHP动态生成静态HTML网页的代码
2010/03/04 PHP
PHP学习笔记 用户注册模块用户类以及验证码类
2011/09/20 PHP
PHP代码审核的详细介绍
2013/06/13 PHP
php文件包含目录配置open_basedir的使用与性能详解
2017/04/03 PHP
Laravel 实现密码重置功能
2018/02/23 PHP
javascript 弹出层组件(升级版)
2011/05/12 Javascript
javascript-简单的日历实现及Date对象语法介绍(附图)
2013/05/30 Javascript
高效率JavaScript编写技巧整理
2013/08/23 Javascript
基于jQuery全屏焦点图左右切换插件responsiveslides
2015/09/07 Javascript
基于SpringMVC+Bootstrap+DataTables实现表格服务端分页、模糊查询
2016/10/30 Javascript
Node.js中的http请求客户端示例(request client)
2017/05/04 Javascript
react native实现往服务器上传网络图片的实例
2017/08/07 Javascript
AngularJS中控制器函数的定义与使用方法示例
2017/10/10 Javascript
React/Redux应用使用Async/Await的方法
2017/11/16 Javascript
浅谈使用React.setState需要注意的三点
2017/12/18 Javascript
vue-star评星组件开发实例
2018/03/01 Javascript
Javascript 编码约定(编码规范)
2018/03/11 Javascript
ES6与CommonJS中的模块处理的区别
2018/06/13 Javascript
Angular Material Icon使用详解
2018/11/07 Javascript
python创建只读属性对象的方法(ReadOnlyObject)
2013/02/10 Python
Python使用multiprocessing实现一个最简单的分布式作业调度系统
2016/03/14 Python
浅析Python 读取图像文件的性能对比
2019/03/07 Python
详解Anconda环境下载python包的教程(图形界面+命令行+pycharm安装)
2019/11/11 Python
Python爬虫获取豆瓣电影并写入excel
2020/07/31 Python
python 8种必备的gui库
2020/08/27 Python
python 实现压缩和解压缩的示例
2020/09/22 Python
澳大利亚设计的婴儿和女孩的衣服:Oobi
2018/12/16 全球购物
大学毕业生最详细的自我评价分享
2013/11/18 职场文书
初婚初育证明
2014/01/14 职场文书
计算机专业毕业生自荐信范文
2014/03/06 职场文书
企业元宵节主持词
2014/03/25 职场文书
会计专业求职信
2014/08/10 职场文书
党员组织生活会发言材料
2014/10/17 职场文书
证券区域经理岗位职责
2015/04/10 职场文书
晚会开场白和结束语
2015/05/29 职场文书