Python:链接的关键字

时间:2011-07-23 09:37:22

标签: python regex google-app-engine

我正在使用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插件?非常感谢!

2 个答案:

答案 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%完美,例如,如果您要替换的单词以句点结尾,则它不起作用;有耐心,你可以解决所有边缘情况。