1

我想将用户输入到 html 页面上的 textarea 中的内容转换为<p>-tagged 输出,其中每个<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>

4

5 回答 5

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'))
于 2012-10-06T20:50:30.513 回答
1

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

来自 a 的文本textarea可以使用 '\r\n' 作为换行符。

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

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

幸运的是,python 提供了一个函数来解决这个问题。可靠的答案是:

html = ''.join('<p>'+L+'</p>' for L in text.splitlines())
于 2014-06-19T10:25:21.150 回答
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'))

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

于 2012-10-06T20:49:40.660 回答
0

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

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

...但这同样有效:

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

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

于 2012-10-06T22:43:46.800 回答
0

很简单>>

html='<p>'+s.replace("\n",'</p><p>')+'</p>'
于 2012-10-07T00:16:58.650 回答