2015-05-24 21 views
1

我想通過正則表達式來改變settings.py而不是手動。我有一個匹配所有安裝的應用程序,並抓住一切除了最後一個括號正則表達式:Python的正則表達式匹配,但不會立即後分

rgx = "(?P<start>INSTALLED_APPS.*?)\)" 

INSTALLED_APPS = (
    'django.contrib.admin', 
    'django.contrib.auth', 
) 
match = re.search(rgx, content, re.DOTALL) 

爭奪

INSTALLED_APPS = (
    'django.contrib.admin', 
    'django.contrib.auth', 

但由於某些原因,當我去分吧,一個新的應用程序,像

INSTALLED_APPS = (
    'django.contrib.admin', 
    'django.contrib.auth', 
    'my-new-app', 
text, n = re.subn(rgx, new_string, content, re.DOTALL) 

它不分任何東西。我跑作subn並證明它不匹配。這沒有任何意義,因爲我使用的是剛剛匹配的完全相同的正則表達式。我怎樣才能得到完全相同的正則表達式匹配,然後不匹配完全相同的字符串?

+1

您的新輸入字符串不會以')結尾。對?然後,不可能有匹配。 –

+0

好點,但那不是問題 - 我說的是整個settings.py文件,它有更多的parens。 ty雖然,基於我的例子,這是一個很好的猜測 – codyc4321

回答

1

您使用re.DOTALL作爲count參數。用它代替flags

re.subn(rgx, new_string, content, flags=re.DOTALL) 
+0

ty先生。 pochmann – codyc4321