我想替换一些" 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标签?
答案 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'
会找到两个(空)匹配:一个位于换行符之前,另一个位于换行符的末尾。
在编译行中添加标记re.MULTILINE
:
p = re.compile('^#(\w*)#\n$', re.MULTILINE)
它应该有用 - 至少对于单个单词,例如你的例子。更好的检查是
p = re.compile('^#([^#]*)#\n$', re.MULTILINE)
- 任何不包含#
的序列。
在这两个表达式中,您需要在要复制的部分周围添加括号,以便在替换代码中使用该文本。请参阅Grouping上的官方文档。