我想将用户输入到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>
答案 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>'