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字符串匹配算法KMP实例
Jul 18 Python
详解Python中的相对导入和绝对导入
Jan 06 Python
让python 3支持mysqldb的解决方法
Feb 14 Python
python配置grpc环境
Jan 01 Python
Python中Numpy ndarray的使用详解
May 24 Python
pycharm创建scrapy项目教程及遇到的坑解析
Aug 15 Python
对django的User模型和四种扩展/重写方法小结
Aug 17 Python
pip install python 快速安装模块的教程图解
Oct 08 Python
浅谈JupyterNotebook导出pdf解决中文的问题
Apr 22 Python
Python如何在main中调用函数内的函数方式
Jun 01 Python
正确的理解和使用Django信号(Signals)
Apr 14 Python
Python并发编程实例教程之线程的玩法
Jun 20 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/12/08 PHP
PHP strtok()函数的优点分析
2010/03/02 PHP
PHP中防止直接访问或查看或下载config.php文件的方法
2012/07/07 PHP
PHP中Http协议post请求参数
2015/11/02 PHP
功能强大的php分页函数
2016/07/20 PHP
php实现贪吃蛇小游戏
2016/07/26 PHP
php获取开始与结束日期之间所有日期的方法
2016/11/29 PHP
php 中htmlentities导致中文无法查询问题
2018/09/10 PHP
删除重复数据的算法
2006/11/23 Javascript
使用dynatrace-ajax跟踪JavaScript的性能
2010/04/12 Javascript
JQuery的Validation插件中Remote验证的中文问题
2010/07/26 Javascript
JavaScript注册时密码强度校验代码
2017/06/30 Javascript
JavaScript实现淘宝京东6位数字支付密码效果
2018/08/18 Javascript
JavaScript(js)处理的HTML事件、键盘事件、鼠标事件简单示例
2019/11/19 Javascript
[19:59]2014DOTA2国际邀请赛 IG战队纪录片
2014/08/07 DOTA
Python解析nginx日志文件
2015/05/11 Python
Ubuntu下创建虚拟独立的Python环境全过程
2017/02/10 Python
python通过百度地图API获取某地址的经纬度详解
2018/01/28 Python
Python重新加载模块的实现方法
2018/10/16 Python
Vs Code中8个好用的python 扩展插件
2020/10/12 Python
基于Python的图像阈值化分割(迭代法)
2020/11/20 Python
Html5 postMessage实现跨域消息传递
2016/03/11 HTML / CSS
德国baby-markt婴儿用品瑞士网站:baby-markt.ch
2017/06/09 全球购物
白兰氏健康Mall:BRAND’S
2017/11/13 全球购物
西班牙家用电器和电子产品购物网站:Mi Electro
2019/02/25 全球购物
Amara德国:家居饰品、设计师品牌和豪华礼品
2019/05/20 全球购物
中专自荐信
2013/10/13 职场文书
甜美蛋糕店创业计划书
2014/01/30 职场文书
霸王洗发水广告词
2014/03/14 职场文书
教师考察材料范文
2014/06/03 职场文书
摄影专业毕业生求职信
2014/08/05 职场文书
妇女工作先进事迹
2014/08/17 职场文书
检讨书1000字
2014/10/11 职场文书
大学生求职简历自我评价
2015/03/02 职场文书
七年级作文之雪景
2019/11/18 职场文书
python数字图像处理之图像自动阈值分割示例
2022/06/28 Python