2011-01-28 29 views
0

我试图在python中使用github flavored markdown实现,但没有运气......我没有太多的正则表达式技巧。将github flavored markdown正则表达式从ruby转换为python

下面是从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 

,这里是我想出迄今在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(似乎不工作r换行符),我很想听听它。我真的很关心换行符。

这些都为正则表达式的测试,从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

请发布一个**应**的工作的例子。什么**期望**和你真正得到什么。 – 2011-01-28 10:48:47

回答

1

那红宝石版本在正则表达式多修改,所以你需要做相同的蟒蛇:

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" 
+0

非常感谢...你能指出我的Ruby正则表达式中的多行修饰符的位置吗?这不是/ M,是吗? – 2011-01-29 04:31:50

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

是的,但这并没有真正解决问题...我添加了应用正则表达式时需要通过的测试。 – 2011-01-28 19:25:11

相关问题