如何在python中

时间:2018-02-20 06:53:17

标签: python

我有一个名为令牌的列表,并希望格式化此列表,以便在我打印时,它是人类可读的。

清单:

tokens = ['<h1>','Hello','World','</h1>','<p>','Welcome','to','this','planet','</p>']

我希望输出看起来像格式化之后:

  

标题:Hello World

     

段落:欢迎来到这个星球

到目前为止我尝试过:

我首先尝试替换<h1><p>标记,以便在输出时显示“标题:”和“段落:”。我使用FOR循环遍历所有标记并找到要替换的正确标记:

for token in tokens:
# comparing strings
elif token == '<h1>':
   print(token.replace('<h1>', 'Heading: '))
elif token == '<p>':
   print(token.replace('<p>', 'Paragraph: '))

我需要做的下一部分是打印<h1>标签和<p>标签之间的句子。为此我想到了创建一个方法,一般的伪代码是:

def between(tokens, tag, endTag)
    if token is between tag and endTag
        print the sentence 

我真的不知道如何让这个方法在python中运行并尝试过类似的东西:

def between(tokens, tag, endTag):
sentence = []
for token in tokens:
    if(token > tag and token < endTag):
        sentance.append(token)
return sentance

但是我知道if语句没有意义并且整体上没有用。如何解决此问题并正确格式化列表?

2 个答案:

答案 0 :(得分:2)

您可以创建人类可读标签名称的字典,并用其名称替换标签。如果令牌不是标签,则不会替换它。

tags = {"<h1>" : 'Heading1: ', "</h1>" : "\n", 
        "<p>" : "Paragraph: ", "</p>" : "\n", ... }
new_tokens = [tags.get(token.lower(),token) for token in tokens]
print("".join(new_tokens))
#Heading1: HelloWorld
#Paragraph: Welcometothisplanet

.lower()函数调用使查找不区分大小写。

答案 1 :(得分:0)

你可以试试这个:

" ".join('@#'.join([e for e in tokens if '</' not in e]).replace("<h1>","\n Heading:").replace("<p>","\n Paragraph:").split("@#"))

鉴于你的字符串没有@#。