我正在尝试在python中使用github风格的markdown实现,没有运气......我没有太多的正则表达式技巧。
以下是来自github的红宝石代码:
# 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
到目前为止,这是我在python 2.5中提出的:
def newline_callback(matchobj):
return re.sub(r'^(.+)$','\1 ',matchobj.group(0))
text = re.sub(r'(\A|^$\n)(^\w[^\n]*\n)(^\w[^\n]*$)+', newline_callback, text)
似乎根本没有任何影响: - /
如果有人在python中有github flavored markdown的完全正常实现,除了this one(似乎不适用于换行符),我很乐意听到它。我真的最关心新线。
这些是正则表达式的测试,来自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'
答案 0 :(得分:1)
Ruby版本在正则表达式中有多行修饰符,所以你需要在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版本)在换行之前添加两个空格,除非我们有两个换行符(段落)。
您提供的测试字符串是否正确?您链接的文件具有此功能,并且可以使用该固定代码:
"apple\npear\norange\n\nruby\npython\nerlang"
->
"apple \npear \norange\n\nruby \npython \nerlang"
答案 1 :(得分:0)
return re.sub(r'^(.+)$',r'\1 ',matchobj.group(0))
^^^--------------------------- you forgot this.