我有一个名为记号的列表,并且希望格式化这个列表,以便当我打印它时,它是人类可读的。
名单:
tokens = ['<h1>','Hello','World','</h1>','<p>','Welcome','to','this','planet','</p>']
我希望输出一旦格式化后会变成什么样子:
标题:你好世界 欢迎来到这个星球
到目前为止,我已经尝试过:
我首先尝试替换<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
但我知道,如果声明没有意义,而且总体上也不可行。如何解决这个问题并正确格式化列表?
发布于 2018-02-19 23:00:16
您可以创建一个人类可读的标签名字典,并将标签替换为它的名称。如果令牌不是标记,则不会替换它。
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()
函数调用使查找不区分大小写.
发布于 2018-02-19 23:07:47
你可以试试这个:
" ".join('@#'.join([e for e in tokens if '</' not in e]).replace("<h1>","\n Heading:").replace("<p>","\n Paragraph:").split("@#"))
考虑到您的字符串没有@#。
https://stackoverflow.com/questions/48879453
复制相似问题