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的re模块应用实例
Sep 26 Python
python编写的最短路径算法
Mar 25 Python
Python中字典的基本知识初步介绍
May 21 Python
详解python的几种标准输出重定向方式
Aug 15 Python
Python使用matplotlib和pandas实现的画图操作【经典示例】
Jun 13 Python
python3.6的venv模块使用详解
Aug 01 Python
彻彻底底地理解Python中的编码问题
Oct 15 Python
Python实现获取汉字偏旁部首的方法示例【测试可用】
Dec 18 Python
python里的单引号和双引号的有什么作用
Jun 17 Python
Python logging日志模块 配置文件方式
Jul 12 Python
Python selenium爬取微信公众号文章代码详解
Aug 12 Python
Pytorch 扩展Tensor维度、压缩Tensor维度的方法
Sep 09 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的PDO操作简单示例
2016/03/30 PHP
PHP单例模式实例分析【防继承,防克隆操作】
2019/05/22 PHP
使用JS操作页面表格,元素的一些技巧
2007/02/02 Javascript
jquery数组之存放checkbox全选值示例代码
2013/12/20 Javascript
浅析js设置控件的readonly与enabled属性问题
2013/12/25 Javascript
JS对象转换为Jquery对象实现代码
2013/12/29 Javascript
用html+css+js实现的一个简单的图片切换特效
2014/05/28 Javascript
JavaScript里四舍五入函数round用法实例
2015/04/06 Javascript
jquery实现弹出层登录和全屏层注册特效
2015/08/28 Javascript
基于RequireJS和JQuery的模块化编程——常见问题全面解析
2016/04/14 Javascript
jquery使用Cookie和JSON记录用户最近浏览历史
2016/04/19 Javascript
使用jquery.form.js实现图片上传的方法
2016/05/05 Javascript
Easyui 去除jquery-easui tab页div自带滚动条的方法
2019/05/10 jQuery
Vue安装浏览器开发工具的步骤详解
2019/05/12 Javascript
CKEditor 4.4.1 添加代码高亮显示插件功能教程【使用官方推荐Code Snippet插件】
2019/06/14 Javascript
微信小程序如何引用外部js,外部样式,公共页面模板
2019/07/23 Javascript
微信小程序使用echarts获取数据并生成折线图
2019/10/16 Javascript
Python的Django框架安装全攻略
2015/07/15 Python
python 自动化将markdown文件转成html文件的方法
2016/09/23 Python
python PyTorch预训练示例
2018/02/11 Python
python遍历一个目录,输出所有的文件名的实例
2018/04/23 Python
python 借助numpy保存数据为csv格式的实现方法
2018/07/04 Python
matplotlib绘制多个子图(subplot)的方法
2019/12/03 Python
NICKIS.com荷兰:设计师儿童时装
2020/01/08 全球购物
医学毕业生自我鉴定
2013/10/30 职场文书
初中音乐教学反思
2014/01/12 职场文书
教学大赛获奖感言
2014/01/15 职场文书
大堂副理的岗位职责范文
2014/02/17 职场文书
迎新晚会主持词
2014/03/24 职场文书
企业安全生产责任书
2014/04/14 职场文书
优秀员工评优方案
2014/06/13 职场文书
乡镇爱国卫生月活动总结
2014/06/25 职场文书
先进班组材料范文
2014/12/25 职场文书
转让协议书
2015/01/27 职场文书
酒店工程部的岗位职责汇总大全
2019/10/23 职场文书
SpringBoot 整合mongoDB并自定义连接池的示例代码
2022/02/28 MongoDB