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中死锁的形成示例及死锁情况的防止
Jun 14 Python
Python ldap实现登录实例代码
Sep 30 Python
python3中dict(字典)的使用方法示例
Mar 22 Python
Python学习笔记之解析json的方法分析
Apr 21 Python
Python3多线程操作简单示例
May 22 Python
用Pycharm实现鼠标滚轮控制字体大小的方法
Jan 15 Python
用Python逐行分析文件方法
Jan 28 Python
python ddt数据驱动最简实例代码
Feb 22 Python
Django restframework 框架认证、权限、限流用法示例
Dec 21 Python
python飞机大战游戏实例讲解
Dec 04 Python
Python数据分析库pandas高级接口dt的使用详解
Dec 11 Python
jupyter 添加不同内核的操作
Feb 06 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 自动加载的简单实现(推荐)
2016/08/12 PHP
javascript中最常用的继承模式 组合继承
2010/08/12 Javascript
使用jQuery全局事件ajaxStart为特定请求实现提示效果的代码
2010/12/30 Javascript
javaScript同意等待代码实现心得
2011/01/01 Javascript
Jquery插件编写简明教程
2014/03/25 Javascript
jQuery选择器源码解读(七):elementMatcher函数
2015/03/31 Javascript
Javascript编写俄罗斯方块思路及实例
2015/07/07 Javascript
为什么JavaScript没有块级作用域
2016/05/22 Javascript
jquery实现垂直和水平菜单导航栏
2020/08/27 Javascript
AngularJS表单详解及示例代码
2016/08/17 Javascript
Vue.js 2.0窥探之Virtual DOM到底是什么?
2017/02/10 Javascript
VueJS如何引入css或者less文件的一些坑
2017/04/25 Javascript
JavaScript队列函数和异步执行详解
2017/06/19 Javascript
Underscore之Array_动力节点Java学院整理
2017/07/10 Javascript
vue中keep-alive的用法及问题描述
2018/05/15 Javascript
详解如何构建一个Angular6的第三方npm包
2018/09/07 Javascript
layer弹出层自适应高度,垂直水平居中的实现
2019/09/16 Javascript
Javascript Web Worker使用过程解析
2020/03/16 Javascript
js实现筛选功能
2020/11/24 Javascript
[53:10]Secret vs Pain 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/20 DOTA
Django imgareaselect手动剪切头像实现方法
2015/05/26 Python
深入解析Python中的list列表及其切片和迭代操作
2016/03/13 Python
在python里协程使用同步锁Lock的实例
2019/02/19 Python
Tensorflow实现在训练好的模型上进行测试
2020/01/20 Python
解决django无法访问本地static文件(js,css,img)网页里js,cs都加载不了
2020/04/07 Python
python简单实现9宫格图片实例
2020/09/03 Python
3D动画《斗罗大陆》上线当日播放过亿
2021/03/16 国漫
基本款天堂:Everlane
2017/05/13 全球购物
农村婚礼证婚词
2014/01/08 职场文书
2014年度党员自我评议
2014/09/13 职场文书
校园广播稿100字
2014/10/06 职场文书
2014年班组长工作总结
2014/11/20 职场文书
民事上诉状范文
2015/05/22 职场文书
开学第一天的感想
2015/08/10 职场文书
Python requests库参数提交的注意事项总结
2021/03/29 Python
深入理解redis中multi与pipeline
2021/06/02 Redis