将github风格的markdown regex从ruby翻译成python

2024-05-13 18:42:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试在python中实现github风格的markdown,但是运气不好。。。我没有太多的正则表达式技能。在

以下是来自github的ruby代码:

# in very clear cases, let newlines become <br /> tags
text.gsub!(/(\A|^$\n)(^\w[^\n]*\n)(^\w[^\n]*$)+/m) do |x|
  x.gsub(/^(.+)$/, "\\1  ")
end

到目前为止,我在Python2.5中得出的结论是:

^{pr2}$

似乎根本没有任何效果:-/

如果有人在python中有一个github flavored markdown的完全工作的实现,除了this one(似乎不适用于新行),我很乐意听听。我最关心的是新线。在

以下是针对regex的测试,来自github的ruby代码:

>>> gfm_pre_filter('apple\\npear\\norange\\n\\nruby\\npython\\nerlang')
'apple  \\npear  \\norange\\n\\nruby  \\npython  \\nerlang'
>>> gfm_pre_filter('test \\n\\n\\n something')
'test \\n\\n\\n something'
>>> gfm_pre_filter('# foo\\n# bar')
'# foo\\n# bar'
>>> gfm_pre_filter('* foo\\n* bar')
'* foo\\n* bar'

Tags: 代码githubapplefoobarfilterpremarkdown
2条回答

Ruby版本的regex中有多行修饰符,因此您需要在python中执行相同的操作:

def newline_callback(matchobj):
    return re.sub(re.compile(r'^(.+)$', re.M),r'\1  ',matchobj.group(0))     

text = re.sub(re.compile(r'(\A|^$\n)(^\w[^\n]*\n)(^\w[^\n]*$)+', re.M), newline_callback, text)

因此,代码将(像Ruby版本一样)在换行符之前添加两个空格,除非我们有两个换行符(段落)。在

你给的测试线对吗?您链接的文件具有以下特性,它使用固定代码:

^{pr2}$
return re.sub(r'^(.+)$',r'\1 ',matchobj.group(0))
                       ^^^             - you forgot this. 

相关问题 更多 >