Python:链接的关键字

Python:链接的关键字,python,regex,google-app-engine,Python,Regex,Google App Engine,我正在谷歌应用引擎上建立一个博客。我想把我博客文章中的一些关键词转换成链接,就像你在很多WordPress博客中看到的一样 这里有一个WP插件可以做同样的事情: 允许您定义关键字/链接对的插件。关键词会自动链接到你的每一篇文章中 我认为这不仅仅是一个简单的Python替换。我要处理的是HTML代码。有时它可能相当复杂 以下面的代码段为例。我想将单词示例转换为http://example.com: Here is an example link:<a href="http://example

我正在谷歌应用引擎上建立一个博客。我想把我博客文章中的一些关键词转换成链接,就像你在很多WordPress博客中看到的一样

这里有一个WP插件可以做同样的事情:

允许您定义关键字/链接对的插件。关键词会自动链接到你的每一篇文章中

我认为这不仅仅是一个简单的Python替换。我要处理的是HTML代码。有时它可能相当复杂

以下面的代码段为例。我想将单词
示例
转换为
http://example.com

Here is an example link:<a href="http://example.com">example.com</a>
但我想:

Here is an <a href="http://example.com">example</a> link:<a href="http://example.com">example.com</a>
这里有一个链接:

有没有任何Python插件能够做到这一点?非常感谢

这可能更适合客户端代码。您可以很容易地修改一个属性以获得所需的结果。通过保留此客户端,您可以避免在“标记”更改时使页面缓存过期


如果你真的需要它来处理服务器端,那么你需要看看它能让你通过一个函数,但是除非你在纯文本上运行,否则你必须首先用某种方法来解析HTML,以确保你没有在任何元素中间替换一些东西。

从美化组导入美化组
html_body=“”
以下是一个示例链接:
"""
汤=美汤(html_body)
对于soup.findAll('a')中的link_标记:
link_tag.string=“%s%s%s”%(“|”,link_tag.string,“|”)
对于soup.findAll中的文本(text=True):
文本格式=[''\
如果word=='example'和not(word.startswith('|')和word.endswith('|'))\
else在foo.split()中逐字逐句
text.replaceWith(“”.join(文本格式))
对于soup.findAll('a')中的link_标记:
link_tag.string=link_tag.string[1:-1]
印花汤
基本上,我从
post_body
中剥离所有文本,用给定的链接替换示例单词,而不涉及解析过程中由“|”字符保存的链接文本


这不是100%完美的,例如,如果您试图替换的单词以句号结尾,则它不起作用;只要有耐心,您就可以修复所有的边缘情况。

“一个简单的Python替换函数”-向我们展示您的代码。@Roman Er,
my_string.replace(…)
?谢谢。哎呀,BeautifulSoup不仅速度慢,而且会被格式错误的HTML所窒息。但是谢谢你的提示。@Doc它很慢,但是因为你在一个像Google App Engine这样的受限环境中,你不得不采用纯Python的东西。如果没有此约束,lxml是首选库。eew。(@使用|符号分隔链接)。
Here is an <a href="http://example.com">example</a> link:<a href="http://example.com">example.com</a>
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