在Python拆分标签

我有一个包含这个文件:

<html> <head> <title> Hello! - {{ today }}</title> </head> <body> {{ runner_up }} avasd {{ blabla }} sdvas {{ oooo }} </body> </html>

什么是提取最好的或最Python的方式{{today}} {{runner_up}}等等?

我知道它可以分裂/正则表达式来完成,但我不知道是否有另一种方式。

PS:考虑一个变量调用加载的数据thedata

编辑:我认为HTML例子是不好的,因为它针对一些评论者BeautifulSoup。 所以,这里是一个新的输入数据:

Fix grammatical or {{spelling}} errors. Clarify meaning without changing it. Correct minor {{mistakes}}. Add related resources or links. Always respect the original {{author}}.

输出:

spelling mistakes author

--------------解决方案-------------

Mmkay,那么这里的一台发电机的解决方案,似乎工作很适合我。 您也可以提供不同的打开和关闭标签,如果你喜欢。

def get_tags(s, open_delim ='{{',
close_delim ='}}' ):

while True:

# Search for the next two delimiters in the source text
start = s.find(open_delim)
end = s.find(close_delim)

# We found a non-empty match
if -1 < start < end:

# Skip the length of the open delimiter
start += len(open_delim)

# Spit out the tag
yield s[start:end].strip()

# Truncate string to start from last match
s = s[end+len(close_delim):]

else:
return

运行针对你的目标输入如下所示:

# prints: today, runner_up, blabla, oooo
for tag in get_tags(html):
print tag

编辑:它也可以对你的新的例子:)。 在我明明快速测试,它似乎也处理格式不正确的标签在一个合理的方式,但我不作任何保证其坚固性的!

尝试TemplateMaker中,反向模板制造商。 它实际上可以从实例学习他们自动地!

我知道你说没有正则表达式/分裂,但我忍不住尝试了一行代码的解决方案:

import re
for s in re.findall("\{\{.*\}\}",thedata):
print s.replace("{","").replace("}","")

编辑:JFS

比较:

>>> re.findall('\{\{.*\}\}', '{{a}}b{{c}}')
['{{a}}b{{c}}']
>>> re.findall('{{(.+?)}}', '{{a}}b{{c}}')
['a', 'c']

JF塞巴斯蒂安说这评论,但我认为这是不够好,应该得到自己的答案:

re.findall(r'{{(.+?)}}', thestring)

我知道OP被要求不涉及拆分或正则表达式的方式-所以也许这是说并不完全回答这个问题。 但是,这一行代码肯定得到我的票是最Python化的方式来完成任务。

如果数据是直接的,一个简单的正则表达式会做的伎俩。

分类:蟒蛇 时间:2015-03-15 人气:4
本文关键词: 蟒蛇,分割,模板引擎
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 0.713 (s). 10 q(s)