即时标记简单解决

问题描述:

问题来源与《Python基础教程》第二十个章节

假设你从一个不想写HTML代码的人那里得到了一个文件,希望将它作为一个网页来使用,你本身也不想自己手的那个的为文档添加所需要的全部标签,而是想要让程序自动完成。程序所要做的工作就是就是将各种文本元素分类,比如标题和被强调的文本,然后明确的标记他们。

完成的目标:

输入不应该包含人工代码或者标签。

程序能够处理不同的块(block),比如标题、段落、列表项、内嵌文本(比如被强调的文本和URL

如果处理的不仅仅HTML,能够扩展到其他的标记语言就更好了。

 

初次实现

首先要做的是把文本切成段落,在测试文档中,段落与段落之间用空格格开了。所以找到一个段落的简单方法就是收集遇到的所有的行,直到遇到一个空行,然后返回已经收集的行。那些返回的行就是一个段落。之后,在开始收集,不需要收集空行,也不要返回空段落(在遇到多个空行时)。同时,要群豹文件的最后一行是空行,否则,程序就不知道什么时候结束。

文本生成器,代码如下(util.py

 

def lines(file):
    for line in file:
        yield line
    yield '\n'
 
def blocks(file):
    block = []
    for line in lines(file):
        if line.strip():
            block.append(line)
        elif block:
            yield ''.join(block).strip()
            block = []

 

实现简单的标记:

打印一些开始标记;

打印每个用段落标签括起来的块;

点一些结束标记;

对于第一个段落,用(h1)括起来,区分标题与段落,代码(simple_makeup.py)实现如下:

import sys, re
from util import *
print('<html><head><title>...</title><body>')
 
title = True
for block in blocks(open(r'D:\Python27\test_input.txt')):
    block = re.sub(r'\*(.+?)\*',r'<em>\1</em>',block)
    if title:
        print('<h1>')
        print block
        print('</h1>')
        title = False
    else:
        print('<p>')
        print block
        print('</p>')
print('</body></html>')

实现结果简单的区分了标题和段落:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值