2015-07-05 20 views
2

正則表達式使我大量困惑,我試圖讓Python(3.4.0)替換MD/CSS代碼的多行(兩行之間標記「表「段)在兩個實例中的一個reddit機器人。它在任何情況下都不起作用,我已經嘗試了多種不同的正則表達式。我也試圖使它成爲一個原始字符串並逃脫更多字符(雖然沒有嘗試過很多組合),正如其他一些SO線程所建議的那樣。令人煩惱的是,regex1在regex101.com上(在php和python中都有)和Pythex.org上的正確匹配。只是不能在Python中工作。Python的Re.Sub沒有任何變化當正則表達式匹配

這是代碼的相關位,都做或多或少相同的事情。

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

非常感謝您的幫助。

+3

不要鏈接到大型外部文件,請提供一個小型自包含示例來演示您的帖子中的問題。 – BrenBarn

回答

1

我修復了你的正則表達式compiling它與旗幟re.DOTALL,使.匹配換行符。我也刪除了從\n轉義。這裏的修改正則表達式:

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

但是,如果在內容上只發生一次的圖案,我就不會這麼複雜的正則表達式打擾,我會使用str.split()方法來代替。

+0

非常感謝你的幫助:)工作很好,我不敢相信我從來沒有想過把它分解成3個然後重新加入。 – PCJonathan

+0

葉,分裂是舊的方式(PHP 3.0時代),在簡單的使用情況下,它很好。我很高興有幫助:) – Tupteq