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 相关文章推荐
Python2.x版本中基本的中文编码问题解决
Oct 12 Python
Python-嵌套列表list的全面解析
Jun 08 Python
python中的插值 scipy-interp的实现代码
Jul 23 Python
python验证身份证信息实例代码
May 06 Python
Python实现平行坐标图的两种方法小结
Jul 04 Python
django之对FileField字段的upload_to的设定方法
Jul 28 Python
Python 使用threading+Queue实现线程池示例
Dec 21 Python
pip install 使用国内镜像的方法示例
Apr 03 Python
使用Dajngo 通过代码添加xadmin用户和权限(组)
Jul 03 Python
Python钉钉报警及Zabbix集成钉钉报警的示例代码
Aug 17 Python
Python Tkinter实例——模拟掷骰子
Oct 24 Python
Python实现猜拳与猜数字游戏的方法详解
Apr 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动态变静态原理
2006/11/25 PHP
PHP 函数call_user_func和call_user_func_array用法详解
2014/03/02 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(十)
2014/06/24 PHP
详解如何实现Laravel的服务容器的方法示例
2019/04/15 PHP
laravel框架select2多选插件初始化默认选中项操作示例
2020/02/18 PHP
jQuery库与其他JS库冲突的解决办法
2010/02/07 Javascript
jquery异步循环获取功能实现代码
2010/09/19 Javascript
JavaScript NodeTree导航栏(菜单项JSON类型/自制)
2013/02/01 Javascript
5秒后跳转效果(setInterval/SetTimeOut)
2013/05/03 Javascript
如何使用JS获取IE上传文件路径(IE7,8)
2013/07/08 Javascript
后台获取ZTREE选中节点的方法
2015/02/12 Javascript
JQuery删除DOM节点的方法
2015/06/11 Javascript
JavaScript中用toString()方法返回时间为字符串
2015/06/12 Javascript
IE8下jQuery改变png图片透明度时出现的黑边
2015/08/30 Javascript
JS Array.slice 截取数组的实现方法
2016/01/02 Javascript
JS判断元素是否在数组内的实现代码
2016/03/30 Javascript
vue.js学习笔记之绑定style样式和class列表
2016/10/31 Javascript
jQuery Validate 数组 全部验证问题
2017/01/12 Javascript
Vue-Router进阶之滚动行为详解
2017/09/13 Javascript
vue2.x+webpack快速搭建前端项目框架详解
2017/11/30 Javascript
使用Vue开发一个实时性时间转换指令
2018/01/17 Javascript
微信小程序实现拖拽功能
2019/09/26 Javascript
用JS实现一个简单的打砖块游戏
2019/12/11 Javascript
javascript设计模式 ? 模板方法模式原理与用法实例分析
2020/04/23 Javascript
原生JS实现九宫格抽奖
2020/09/13 Javascript
解决antd datepicker 获取时间默认少8个小时的问题
2020/10/29 Javascript
使用node-media-server搭建一个简易的流媒体服务器
2021/01/20 Javascript
利用python在excel里面直接使用sql函数的方法
2019/02/08 Python
keras CNN卷积核可视化,热度图教程
2020/06/22 Python
接口自动化多层嵌套json数据处理代码实例
2020/11/20 Python
多视角3D逼真HTML5水波动画
2016/03/03 HTML / CSS
JYSK加拿大:购买家具、床垫、家居装饰等
2020/02/14 全球购物
Perfume’s Club中文官网:西班牙美妆在线零售品牌
2020/08/24 全球购物
C语言中一个结构不能包含指向自己的指针吗
2012/05/25 面试题
2014年计划生育工作总结
2014/11/14 职场文书
巧用 -webkit-box-reflect 倒影实现各类动效(小结)
2021/04/22 HTML / CSS