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文件夹与文件的操作实现代码
Jul 13 Python
python验证码识别教程之滑动验证码
Jun 04 Python
pandas Dataframe行列读取的实例
Jun 08 Python
Python图像的增强处理操作示例【基于ImageEnhance类】
Jan 03 Python
Python使用指定端口进行http请求的例子
Jul 25 Python
使用Python调取任意数字资产钱包余额功能
Aug 15 Python
Pytorch中Tensor与各种图像格式的相互转化详解
Dec 26 Python
tensorflow求导和梯度计算实例
Jan 23 Python
Python3加密解密库Crypto的RSA加解密和签名/验签实现方法实例
Feb 11 Python
python中urllib.request和requests的使用及区别详解
May 05 Python
协程Python 中实现多任务耗资源最小的方式
Oct 19 Python
基于Python实现对比Exce的工具
Apr 07 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+jQuery 注册模块的改进(三):更新到Smarty3.1
2014/10/14 PHP
php实现refresh刷新页面批量导入数据的方法
2014/12/23 PHP
PHP字符串逆序排列实现方法小结【strrev函数,二分法,循环法,递归法】
2017/01/13 PHP
为Plesk PHP7启用Oracle OCI8扩展方法总结
2019/03/29 PHP
php和redis实现秒杀活动的流程
2019/07/17 PHP
动态控制Table的js代码
2007/03/07 Javascript
IE php关于强制下载文件的代码
2008/08/23 Javascript
Prototype PeriodicalExecuter对象 学习
2009/07/19 Javascript
单击按钮显示隐藏子菜单经典案例
2013/01/04 Javascript
JavaScript原型链示例分享
2014/01/26 Javascript
在JavaScript中重写jQuery对象的方法实例教程
2014/08/25 Javascript
深入剖析JavaScript编程中的对象概念
2015/10/21 Javascript
JQuery动态添加Select的Option元素实现方法
2016/08/29 Javascript
走进javascript——不起眼的基础,值和分号
2017/02/24 Javascript
详解Angular2 关于*ngFor 嵌套循环
2017/05/22 Javascript
js登录滑动验证的实现(不滑动无法登陆)
2018/01/03 Javascript
jQuery实现模糊搜索功能的方法分析
2018/06/29 jQuery
基于element-ui的rules中正则表达式
2018/09/04 Javascript
利用百度echarts实现图表功能简单入门示例【附源码下载】
2019/06/10 Javascript
vue 解决遍历对象显示的顺序不对问题
2019/11/07 Javascript
浅谈vue 多个变量同时赋相同值互相影响
2020/08/05 Javascript
[02:08]我的刀塔不可能这么可爱 胡晓桃_1
2014/06/20 DOTA
[47:12]TFT vs Secret Supermajor小组赛C组 BO3 第三场 6.3
2018/06/04 DOTA
Python中的os.path路径模块中的操作方法总结
2016/07/07 Python
Python实现嵌套列表去重方法示例
2017/12/28 Python
微信跳一跳python辅助脚本(总结)
2018/01/11 Python
Python jieba库用法及实例解析
2019/11/04 Python
Html5上传图片 移动端、PC端通用代码
2016/06/08 HTML / CSS
找到不普通的东西:Bonanza
2016/10/20 全球购物
美国滑雪板和装备购物网站:Skis.com
2018/12/20 全球购物
如何写一个自定义标签
2012/12/28 面试题
自主招生自荐信范文
2013/12/04 职场文书
商务经理岗位职责
2014/08/03 职场文书
诉讼代理人授权委托书
2014/10/11 职场文书
Python 流媒体播放器的实现(基于VLC)
2021/04/28 Python
Go中的条件语句Switch示例详解
2021/08/23 Golang