在我的网站上,用户可以创建纯文本和html混合的帖子。我无法很好地呈现他们的帖子。
例如,他们可能会写:
interface
我想要呈现空白1和3,而不是空白2。我该怎么做?
我尝试使用This is the first line of the post.
<!-- whitespace 1 -->
<ul>
<li>List item 1.</li>
<!-- whitespace 2 -->
<li>List item 2.</li>
<li>List item 3.</li>
</ul>
<!-- whitespace 3 -->
This is the last line of the post.
和linebreaks
的组合,但无法正常工作。
谢谢
杰克
答案 0 :(得分:0)
正如我在评论中提到的,您可以使用正则表达式获取每个列表内容的匹配集合,然后检查这些内容以确保它们不包含任何<br>
标记。要收集列表元素的内容,可以使用此模式(?s)(?<=<[ou]l>).*?(?=<\/[ou]l>)
。
使用re.findall("(?s)(?<=<[ou]l>).*?(?=<\/[ou]l>)", inputstring)
获得匹配项后,您可以执行以下操作:
for m in matches:
if not re.match("<br>", m):
#input is fine
else:
#lists cannot contain <br> tags
这会拒绝包含其中带有<br>
标签的列表的输入。
为解释模式,
(?s)
使得.
也匹配换行符
(?<=<[ou]l>)
表示模式必须以<ol>
或<ul>
开头
.*?
意味着捕获所有内容,直到模式的下一部分
(?=<\/[ou]l>)
表示模式后跟</ol>
或</ul>