本章介绍如何使用Python杰出的文本处理功能,包括使用正则表达式将纯文本文件转换为用HTML或XML等语言标记的文件。如果不熟悉这些语言的人编写了一些文本,而你要在系统中使用这些内容并对其进行标记,就必须具备这些技能。
你不能熟练地使用XML?不用为此担心,只要对HTML有大致的了解,你就能完成本章的任务。如果需要阅读HTML简介,网上的相关教程数不胜数。有关XML使用示例,请参阅第22章。
下面先来实现一个只能做基本处理的简单原型,再对这个程序进行扩展,让标记系统更灵活。
20.1 问题描述
你要给纯文本文件添加格式。假设你要将一个文件用作网页,而给你文件的人嫌麻烦,没有以HTML格式编写它。你不想手工添加需要的所有标签,想编写一个程序来自动完成这项工作。
注意 事实上,这种“纯文本标记”在最近几年已非常普遍,主要原因可能是带纯文本界面的维基百科和博客软件呈爆炸式增长。有关这方面的详细信息,请参阅20.6节。
大致而言,你的任务是对各种文本元素(如标题和突出的文本)进行分类,再清晰地标记它们。就这里的问题而言,你将给文本添加HTML标记,得到可作为网页的文档,让Web浏览器能够显示它。然而,创建基本引擎后,完全可以添加其他类型的标记(如各种形式的XML和LATEX编码)。对文本文件进行分析后,你甚至可以执行其他的任务,如提取所有的标题以制作目录。
你拿到的文本可能包含一些线索(突出的文本形如*like this*),但要让程序能够猜测出文档的结构,可能需要一些技巧。
着手编写原型前,先来定义一些目标。
输入无需包含人工编码或标签。
程序需要能够处理不同的文本块(如标题、段落和列表项)以及内嵌文本(如突出的文本和URL)。
虽然这个实现添加的是HTML标签,但应该很容易对其进行扩展,以支持其他标记语言。
在程序的第一个版本中,可能无法实现所有这些目标,但这正是原型的意义所在。你编写原型旨在找出最初的想法存在的缺陷以及学习如何编写程序来解决面临的问题。
提示 在可能的情况下,最好逐渐修改最初的程序,而不要推倒重来。为清晰起见,我将提供两个完全独立的程序版本。