《Python cookbook》读书笔记二
re.split()可以指定多个分隔符。
检查字符串开头或结尾的一个简单方法是使用str.startswith() 或者是str.endswith() 方法。
当写正则式字符串的时候,相对普遍的做法是使用原始字符串比如r'(nd+)/(nd+)/(nd+)' 。这种字符串将不去解析反斜杠,这在正则表达式中是很有用的。如果不这样做的话,你必须使用两个反斜杠,类似'(nnd+)/(nnd+)/(nnd+)' 。
>>> text = 'Today is 11/27/2012. PyCon starts 3/13/2013.'
>>> import re
>>> re.sub(r'(\d+)/(\d+)/(\d+)', r'\3-\1-\2', text)
sub() 函数中的第一个参数是被匹配的模式,第二个参数是替换模式。反斜杠数字比如\3 指向前面模式的捕获组号。
如果除了替换后的结果外,你还想知道有多少替换发生了,可以使用re.subn()来代替。
对于一般的忽略大小写的匹配操作,可以传递一个re.IGNORECASE 标志参数,说明忽略大小写。
re.sub('python', 'snake', text, flags=re.IGNORECASE)
re.compile() 函数接受一个标志参数叫re.DOTALL 。它可以让正则表达式中的点(.) 匹配包括换行符在内的任意字符。
文本字符清理一个最主要的问题应该是运行的性能。一般来讲,代码越简单运行越快。对于简单的替换操作, str.replace() 方法通常是最快的,甚至在你需要多次调用的时候
>>> format(text, '=>20s')
'=========Hello World'
>>> format(text, '*^20s format 用于格式化字符串
使用加号(+) 操作符去连接大量的字符串的时候是非常低效率的,因为加号连接会引起内存复制以及垃圾回收操作。
a Unicode string is a sequence of code points, which are numbers from 0 to 0x10ffff. This sequence needs to be represented as a set of bytes (meaning, values from 0–255) in memory. The rules for translating a Unicode string into a sequence of bytes are called an encoding
Software should only work with Unicode strings internally, converting to a particular encoding on output.
>>> import textwrap
>>> print(textwrap.fill(s, 70)) 格式化文本
对于简单的舍入运算,使用内置的round(value, ndigits) 函数
从一个序列中随机的抽取一个元素,可以使用random.choice()
处理日期可以尝试 dateutil 模块 和 calendar 模块
strptime() 的性能很差,因为它是使用纯Python 实现,并且必须处理所有的系统本地设置。如果你要在代码中需要解析大量的日期并且已经知道了日期字符串的确切格式,可以自己实现一套解析方案来获取更好的性能。
可以通过在自定义类上实现reversed () 方法来实现反向迭代