我正在使用Google App Engine构建博客。我想将我的博客帖子中的一些关键字转换为链接,就像你在许多WordPress博客中看到的那样。
这是一个WP插件,它执行相同的操作:http://wordpress.org/extend/plugins/blog-mechanics-keyword-link-plugin-v01/
允许您定义关键字/链接对的插件。关键字会自动链接到您的每个帖子中。
我认为这不仅仅是一个简单的Python替换。我正在处理的是HTML代码。有时可能会非常复杂。
以下面的代码片段为例。我想将单词example
转换为指向http://example.com
的链接:
Here is an example link:<a href="http://example.com">example.com</a>
通过简单的Python替换函数将example
替换为<a href="http://example.com">example</a>
,它将输出:
Here is an <a href="http://example.com">example</a> link:<a href="http://<a href="http://example.com">example</a>.com"><a href="http://example.com">example</a>.com</a>
但我想:
Here is an <a href="http://example.com">example</a> link:<a href="http://example.com">example.com</a>
有没有能够做到这一点的Python插件?非常感谢!
答案 0 :(得分:1)
这可能更适合客户端代码。您可以轻松修改word highlighter以获得所需的结果。通过保留此客户端,您可以避免在“标记”更改时使页面缓存失效。
如果您确实需要在服务器端处理它,那么您需要查看使用re.sub来传递函数,但除非您使用纯文本操作,否则必须首先解析使用类似minidom的HTML来确保您不会替换任何元素中间的内容。
答案 1 :(得分:1)
这大致是您使用Beautifulsoup:
所能做的from BeautifulSoup import BeautifulSoup
html_body ="""
Here is an example link:<a href='http://example.com'>example.com</a>
"""
soup = BeautifulSoup(html_body)
for link_tag in soup.findAll('a'):
link_tag.string = "%s%s%s" % ('|',link_tag.string,'|')
for text in soup.findAll(text=True):
text_formatted = ['<a href=""http://example.com"">example</a>'\
if word == 'example' and not (word.startswith('|') and word.endswith('|'))\
else word for word in foo.split() ]
text.replaceWith(' '.join(text_formatted))
for link_tag in soup.findAll('a'):
link_tag.string = link_tag.string[1:-1]
print soup
基本上我正在删除post_body
中的所有文本,用给定的链接替换示例单词,而不触及“|”保存的链接文本解析过程中的字符。
这不是100%完美,例如,如果您要替换的单词以句点结尾,则它不起作用;有耐心,你可以解决所有边缘情况。