如何通过python将markdown标签替换为html?

时间:2015-10-05 07:53:39

标签: python regex

我想替换一些" markdown"标签到html标签。

例如:

#Title1#
##title2##
Welcome to **My Home Page**

将变为

<h1>Title1</h1>
<h2>title2</h2>
Welcome to <b>My Home Page</b>

我只是不知道如何做到这一点......对于 Title1 ,我试过这个:

#!/usr/bin/env python3
import re
text = '''
        #Title1#
        ##title2##
'''
 p = re.compile('^#\w*#\n$')
 print(p.sub('<h1>\w*</h1>',text))

但没有任何反应......

 #Title1#
 ##title2##

那些bbcode / markdown语言如何进入html标签?

2 个答案:

答案 0 :(得分:3)

检查此正则表达式:demo

在这里,您可以看到我如何将<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> <constant name="struts.devMode" value="true" /> <package name="default" extends="struts-default, tiles-default"> <result-types> <result-type name="tiles" class="org.apache.struts2.views.tiles.TilesResult" /> </result-types> <action name="loginaction" class="com.timesheet.action.LoginAction" method="execute"> <result name="input" >/Login.jsp</result> <result name="success" type="tiles">/bodydaywise.tiles</result> <result name="error" type="tiles">/error.jsp</result> </action> <action name="daywise" class="com.timesheet.action.BodyDaywiseAction"> <result name="success" type="tiles">/bodydaywisesuccess.tiles</result> <result name="error" type="tiles">/error.jsp</result> </action> </package> </struts> 替换为#...#。 我相信你可以使用双<h1>...</h1>等来处理其他降价功能,但仍然应该听@Thomas和@nhahtdh注释并使用降价解析器。在这种情况下使用正则表达式是不可靠的,缓慢且不安全的。

对于#**...**之类的内联文字,您可以尝试使用替换demo进行此正则表达式。希望你可以将其转换为其他功能,如下划线等。

答案 1 :(得分:1)

您的正则表达式不起作用,因为在默认模式下,^$(分别)匹配整个字符串的开头和结尾。

  

'^'

     

(Caret。)匹配字符串的开头,并且在MULTILINE模式下也会在每个换行符后立即匹配(我的emph。)

     

'$'

     

匹配字符串的结尾或字符串末尾的换行符之前,并且MULTILINE模式也匹配换行符之前。 foo匹配'foo'和'foobar',而正则表达式foo$仅匹配'foo'。更有趣的是,在foo.$中搜索'foo1\nfoo2\n'通常匹配'foo2',但在MULTILINE模式下搜索'foo1';在$中搜索单个'foo\n'会找到两个(空)匹配:一个位于换行符之前,另一个位于换行符的末尾。

     

7.2.1. Regular Expression Syntax

在编译行中添加标记re.MULTILINE

p = re.compile('^#(\w*)#\n$', re.MULTILINE)

它应该有用 - 至少对于单个单词,例如你的例子。更好的检查是

p = re.compile('^#([^#]*)#\n$', re.MULTILINE)

- 任何不包含#的序列。

在这两个表达式中,您需要在要复制的部分周围添加括号,以便在替换代码中使用该文本。请参阅Grouping上的官方文档。