将textarea输入转换为段落HTML

时间:2012-10-06 20:44:23

标签: python html regex newline paragraph

我想将用户输入到html页面上的textarea的内容转换为<p>标记的输出,其中每个<p>替换新行。

我正在尝试使用正则表达式,但我无法让它工作。有人会改正我的表达吗?

String = "Hey, this is paragraph 1 \n and this is paragraph 2 \n and this will be paragraph 3"
Regex = r'(.+?)$'

只会产生Hey, this is paragraph 1 \n and this is paragraph 2 \n<p>and this will be paragraph 3</p>

5 个答案:

答案 0 :(得分:2)

我不会为此使用正则表达式,因为你不需要它。看看这个:

text = "Hey, this is paragraph 1 \n and this is paragraph 2 \n and this will be paragraph 3"
html = ''
for line in text.split('\n'):
   html += '<p>' + line + '</p>'

print html

使它成为一条线,因为更短更好,更清晰:

html = ''.join('<p>'+L+'</p>' for L in text.split('\n'))

答案 1 :(得分:1)

我会这样做:

s = "Hey, this is paragraph 1 \n and this is paragraph 2 \n and this will be paragraph 3"
"".join("<p>{0}</p>".format(row) for row in s.split('\n'))

您基本上将字符串拆分为行列表。然后用段落标记包装每一行。最后加入你的行。

答案 2 :(得分:1)

以上答案依赖于识别&#39; \ n&#39;不能可靠地工作。您需要使用.splitlines()。我没有足够的代表对所选答案发表评论,当我编辑维基时,有人只是将其还原。那么有更多代表的人可以解决它。

来自textarea的文字可能会使用&#39; \ r \ n&#39;作为一个新的角色。

>> "1\r\n2".split('\n') 
['1\r', '2']

&#39; \ r&#39;单独在网页内部无效,因此使用上述任何解决方案都会产生格式错误的网页。

幸运的是python提供了解决此问题的功能。可靠的答案是:

html = ''.join('<p>'+L+'</p>' for L in text.splitlines())

答案 3 :(得分:0)

你需要摆脱锚点$。你的正则表达式试图匹配一个或多个非换行符,然后是字符串的结尾。您可以使用MULTILINE模式使锚点在行边界处匹配,如下所示:

s1 = re.sub(r'(?m)^.+$', r'<p>\g<0></p>', s0)

......但这也很有效:

s1 = re.sub(r'.+', r'<p>\g<0></p>', s0)

不情愿的量词(.+?)也没有做任何有用的事情,但它并没有像锚一样弄乱输出。

答案 4 :(得分:0)

非常简单&gt;&gt;

html='<p>'+s.replace("\n",'</p><p>')+'</p>'