编写多行模式的正则表达式
有些时候我们想对正则表达式做一段文本块匹配,并且希望在匹配的时候跨越多行。我的做法就是使用re.compile()函数。它可接受以一个有用的标记--re.DOTALL,它可以让正则表达式中的句点通配所有字符。一般情况来说,使用re.DOTALL标记就可以很好的完成工作,但是遇到复杂情况的时候(比如做分词的时候)最好还是定义自己的正则表达式模式。
字符串的连接和合并
有时候,我们想把许多小字符串合并为一个大的。对于这种情况,如果想要合并的字符串在一个序列或者可以进行迭代的对象中,最简单就是用join()
>>>
注意到没有?在' '里面就是我用来填入字符串里面的分隔符。这玩意可能语法上看上去真的有点怪异,但是它真的可以这么用!当然。如果你只是想连接一些简单的字符串,那只需要+操作符就好了,稍微复杂点的咱可以用format()来进行替代
>>>
实际上,我么之所以用format()来替代主要就是因为使用+操作做大量字符串连接是无比之低效率的。所以我这么一个技巧,是利用生成器的表达式将数据转换为字符串的同时完成连接操作:
>>>
注意,当你在对字符串连接同I/O操作的时候就需要对需求进行分析。如果字符串都很小,那么该用这样的:
f
这样虽然执行一次的I/O系统资源耗费有些高,但是性能和速度都得到了保证。而当你的字符串都很大的时候,我么就可能需要这种方式了:
f
这样减少系统资源的使用而让程序更加高效的运行。如果我们编写的代码要从很多的字符串中构建输出,这个时候生成器函数yield关键字就有用武之地了:
def
或者,我们可以把I/O操作和join()智能化的结合一下:
def
给字符串中的变量名做插值处理
假如我们想要创建一个字符串,其中嵌入的变量名会以变量的字符串形式替换掉。一般来说,这个功能可以通过字符串的format()的方法近似模拟出来,或者,把format_map()和vars()联合起来用,差不多是这个样子:
>>>
有趣的是,var()的一个特性就是它还可以用到类实例上:
>>>
但是请注意一下,format()和format_map()的一个缺点就是它没法处理缺少某个值的情况。而避免出现这种情况的解决方案就是又单独定义一个带有_misssing_()方法的字典,然后传参给format_map()。
代码汇总:
import
参考书目:
《Python CookBook》作者:【美】 David Beazley, Brian K. Jones
Github地址:
yidao620c/python3-cookbookgithub.com