当Regex匹配时,Python的Re.Sub没有任何改变

时间:2015-07-05 23:41:36

标签: python regex

正则表达式让我大为困惑,我试图让Python(3.4.0)替换多行MD / CSS代码(在两行中标记“表”段的开头和结尾) reddit机器人。它在两种情况下都不起作用,我为此尝试了多种不同的正则表达式。我也尝试使它成为一个原始字符串并转出更多字符(虽然,没有尝试过很多组合),正如其他一些SO线程所建议的那样。令人讨厌的是,正则表达式在regex101.com(在php和python风格上)和Pythex.org上都很好。只是在Python中不起作用。

这是代码的相关部分,它们或多或少地做同样的事情。

sidebar = r.get_settings(sub)["description"]
regex = r'(?<=\[\]\(#STARTTABLE\)\\n).*?(?=\\n\[\]\(#ENDTABLE\)|$)'
sidebar = re.sub(regex,md,sidebar)
r.update_settings(r.get_subreddit(sub),description=sidebar)


stylesheet = r.get_stylesheet(sub)["stylesheet"]
regex = r'(?<=\/\*START TABLE\*\/).*?(?=\/\*END TABLE\*\/|$)'
stylesheet = re.sub(regex,css, stylesheet)
r.set_stylesheet(sub,stylesheet)

我已将各种变量上传到pastebin。侧边栏字符串可用here,md here,样式表here和css here

非常感谢你的帮助。

1 个答案:

答案 0 :(得分:1)

我使用compiling标记re.DOTALL修正了你的正则表达式,使.匹配换行符。我还删除了\n的转义。这是修改后的正则表达式:

regex = re.compile(r'(?<=\[\]\(#STARTTABLE\)\n).*?(?=\n\[\]\(#ENDTABLE\)|$)', re.S)
sidebar = regex.sub(md, sidebar)

但是,如果模式仅在内容中出现一次,我就不会为复杂的正则表达式而烦恼,我会使用str.split()方法。