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中的yield浅析
Jun 16 Python
Python自定义scrapy中间模块避免重复采集的方法
Apr 07 Python
python使用nntp读取新闻组内容的方法
May 08 Python
Django框架下在视图中使用模版的方法
Jul 16 Python
Python中字典和集合学习小结
Jul 07 Python
Python多层装饰器用法实例分析
Feb 09 Python
python制作抖音代码舞
Apr 07 Python
Pythony运维入门之Socket网络编程详解
Apr 15 Python
Python函数参数分类原理详解
May 28 Python
Python flask框架端口失效解决方案
Jun 04 Python
python re的findall和finditer的区别详解
Nov 15 Python
Python使用openpyxl批量处理数据
Jun 23 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
推荐几部必看的DC动画电影
2020/03/03 欧美动漫
php使用explode()函数将字符串拆分成数组的方法
2015/02/17 PHP
关于图片验证码设计的思考
2007/01/29 Javascript
WEB高性能开发之疯狂的HTML压缩
2010/06/19 Javascript
js常用排序实现代码
2010/12/28 Javascript
js 函数调用模式小结
2011/12/26 Javascript
JavaScript 高级篇之闭包、模拟类,继承(五)
2012/04/07 Javascript
jquery 实现上下滚动效果示例代码
2013/08/09 Javascript
Javascript让DEDECMS告别手写Tag
2014/09/01 Javascript
jquery处理json对象
2014/11/03 Javascript
使用原生JS实现弹出层特效
2014/12/22 Javascript
jQuery操作DOM之获取表单控件的值
2015/01/23 Javascript
JavaScript中匿名函数的用法及优缺点详解
2016/06/01 Javascript
vue 请求后台数据的实例代码
2017/06/22 Javascript
vue项目中使用Svg的方法
2018/10/24 Javascript
在Vant的基础上实现添加表单验证框架的方法示例
2018/12/05 Javascript
[03:17]DOTA2英雄基础教程 剧毒术士
2013/12/12 DOTA
python实现计算倒数的方法
2015/07/11 Python
python实现黑客字幕雨效果
2018/06/21 Python
Django实战之用户认证(用户登录与注销)
2018/07/16 Python
Django如何开发简单的查询接口详解
2019/05/17 Python
Django项目创建及管理实现流程详解
2020/10/13 Python
css3中用animation的steps属性制作帧动画
2019/04/25 HTML / CSS
AmazeUI中模态框的实现
2020/08/19 HTML / CSS
日本著名的服饰鞋帽综合类购物网站:MAGASEEK
2019/01/09 全球购物
写自荐信的七个技巧
2013/10/15 职场文书
总经理助理的八要求
2013/11/12 职场文书
饲料采购员岗位职责
2013/12/19 职场文书
小学清明节活动方案
2014/03/08 职场文书
生日礼品店创业计划书范文
2014/03/21 职场文书
生物工程专业求职信
2014/09/03 职场文书
研究生导师推荐信
2014/09/06 职场文书
医学检验专业自荐信
2014/09/18 职场文书
付款委托书范本
2014/10/05 职场文书
解决使用了nginx获取IP地址都是127.0.0.1 的问题
2021/09/25 Servers
python开发制作好看的时钟效果
2022/05/02 Python