如何将一个示例Twitter帖子转换为它的HTML等价物

时间:2017-04-16 06:50:50

标签: python html

例如,我有字符串:

"<p class='foo'>Hello World</p>"

结果必须是:

"&lt;p class='foo'&gt;Hello World&lt;/p&gt;"

如果文本中有链接,则必须将其转换为HTML <a>标记。

此外,如果有提及,如下:

"<p>Hello World @Mark</p>"

结果将是

"&lt;p&gt;Hello World <a href='/users/Mark'>@Mark</a>&lt;/p&gt;"

注意:这是在python中。正则表达式是一种可能的解决方案吗?

2 个答案:

答案 0 :(得分:0)

关于使用@符号的提及,您可以正如您所提到的那样使用正则表达式,或者只是手动循环遍历存储@符号的起始位置的字符串的每个字符,以及当您遇到不是字符的字符时字母数字字符(例如空格或html标签/实体),然后你会在提到的末尾知道你,所以你存储结束。使用字符串子字符串函数来剪切其余字符。

其余代码都有HTML实体,只需在准备输出时还原或删除它们。

答案 1 :(得分:0)

您可以先使用cgi.escape函数来转义字符串:

import cgi
a = '"<p>Hello World @Mark</p>"'
escaped = cgi.escape(a)

# result will be: '&lt;p&gt;Hello World @Mark&lt;/p&gt;'

然后你可以使用regexp替换@Mark:

import re
result = re.sub('(@([-._a-zA-Z0-9]+))', r'<a href="/users/\2">\1</a>', a)

# result will be: '&lt;p&gt;Hello World <a href="/users/Mark">@Mark</a>&lt;/p&gt;'

如果您还需要转义<a href="...">...</a>,请先运行正则表达式。