本文主要记录和总结本人在阅读《Python标准库》一书,文本这一章节的学习和理解。
其实在Python中,使用文本这样的一些方法是特别常用的一件事。在一般的情况下,都会使用String这样的一个类,应该算是Python中最基础的一个标准类了。
1.1 函数
string类中的capwords()和maketrans()。
capwords()的作用是将一个字符串中的所有单词的首字母大写;
maketrans()函数将创建转换表,可以translate()方法将一组字符修改成另一组字符,这种做法比反复调用replace()更为高效。
string中有一个叫模板的功能。同样是用来做字符的拼接的。
1.2 textwrap()——格式化文本段落
作用:通过调整换行符在段落中出现的位置来格式化文本。
1.3 re-正则表达式
作用:使用形式化模式搜索和修改文本。
regular expression。
1.3.1 re中搜索文本中的模式。
1.3.2 编译正则表达式
re包含一些模块级的函数,用于处理作为文本字符串的正则表达式,对于频繁使用的表达式,编译这些表达式会更加的高效。compile()函数会把一个表达式字符串转换成为一个RegexObject。
模块级函数会维护已编译表达式的一个缓存,但是这个缓存的大小是有限的,直接使用已编译的表达式可以避免缓存查找开销。使用已编译表达式的另一个好处是,把编译的过程进行了提前,在某种程度上优化了程序运行过程中的效率。
1.3.3 多重匹配
search()在前面中,是用来查找文本字符串中的单个实例。findall()函数会返回输入中与模式匹配的,而不重叠的所有子串。
1.3.4 模式语法
Python的正则表达式的模式语法。
1.3.5 限制搜索
如果提前已经知道只需要搜索整个输入的一个子集,可以告诉re先知搜索范围,从而进一步约束正则表达式。
其实在Python中,使用文本这样的一些方法是特别常用的一件事。在一般的情况下,都会使用String这样的一个类,应该算是Python中最基础的一个标准类了。
1.1 函数
string类中的capwords()和maketrans()。
capwords()的作用是将一个字符串中的所有单词的首字母大写;
maketrans()函数将创建转换表,可以translate()方法将一组字符修改成另一组字符,这种做法比反复调用replace()更为高效。
string中有一个叫模板的功能。同样是用来做字符的拼接的。
高级的模板可以修改string.Template的默认语法,为此需要调整它在模板中查找变量名所使用的正则表达式。
#############################################################
#test about matetrans()
leet = string.maketrans('asdfghjk', '12345678')
print s.translate(leet)
print s
#############################################################
#test about Template()
values = {'var':'foo'}
t=string.Template("""
Variable : $var
Escape : $$
Variable in text: ${var}iable
""")
print 'TEMPLATE:', t.substitute(values)
s="""
Variable : %(var)ss
Escape : %%
Variable in text: %(var)sssssiable
"""
print 'INTERPOLATION:', s%values
1.2 textwrap()——格式化文本段落
作用:通过调整换行符在段落中出现的位置来格式化文本。
1.3 re-正则表达式
作用:使用形式化模式搜索和修改文本。
regular expression。
1.3.1 re中搜索文本中的模式。
import re
print '-'*30
#about regular expression search()
pattern = 'this'
text='Does this text match the pattern?'
match = re.search(pattern, text)
s=match.start()
e=match.end()
print 'Dound "%s" \nin "%s" \nfrom %d to %d ("%s")' % \
(match.re.pattern,match.string,s,e,text[s:e])
#start()和end()方法可以给出字符串中相应的索引。
1.3.2 编译正则表达式
re包含一些模块级的函数,用于处理作为文本字符串的正则表达式,对于频繁使用的表达式,编译这些表达式会更加的高效。compile()函数会把一个表达式字符串转换成为一个RegexObject。
print '-'*30
#about the Compile()
regexes=[re.compile(p)
for p in ['this','that']
]
text='Does this text match the pattern?'
print 'Text: %r\n' % text
for regex in regexes:
print 'seeking "%s" ->' % regex.pattern
if regex.search(text):
print 'match!'
else:
print 'no match!'
模块级函数会维护已编译表达式的一个缓存,但是这个缓存的大小是有限的,直接使用已编译的表达式可以避免缓存查找开销。使用已编译表达式的另一个好处是,把编译的过程进行了提前,在某种程度上优化了程序运行过程中的效率。
1.3.3 多重匹配
search()在前面中,是用来查找文本字符串中的单个实例。findall()函数会返回输入中与模式匹配的,而不重叠的所有子串。
print '-'*30
#about the findall()
text = 'bbbbbababbababbabbbaba'
pattern = 'ba'
for match in re.findall(pattern, text):
print match
print '-'*30
#about the finditer()
#finditer会返回一个迭代器,可以生成match实例,而不像findall()是直接返回的字符串。
text='aaaadaaaaadadadada'
pattern='da'
for match in re.finditer(pattern,text):
s=match.start()
e=match.end()
print 'Found "%s" at %d:%d' % (text[s:e],s,e)
1.3.4 模式语法
Python的正则表达式的模式语法。
1.3.5 限制搜索
如果提前已经知道只需要搜索整个输入的一个子集,可以告诉re先知搜索范围,从而进一步约束正则表达式。
print '-'*30
#一种iterall()的不太高效的实现方式。
text='this is some text -- with punctuation.'
pattern=re.compile(r'\b\w*is\w*\b')
print 'text:', text
pos=0
while True:
match=pattern.search(text,pos)
print match
if not match:
break
s=match.start()
e=match.end()
print s,e
print '%d: %d = "%s"' % (s,e-1,text[s:e])
pos=e