2013-10-10 123 views
0

如何創建可匹配行首的正則表達式以及以tab開頭的所有以下行?例如代碼塊的Python正則表達式?

not keyword ; 
    not this line ; 
keyword and random text ; 
    this line ; 
    this line ; 
    and this line ; 
not keyword ; 

我希望能夠匹配從'^關鍵字'開始到'和此行;'

謝謝。

編輯。我試圖爲我不需要的節點移除Maya的MEL代碼。實際的代碼看起來像這樣,帶有多行setAttr和縮進標籤。

createNode mentalrayOptions ......... ; 
    setAttr .............. ; 

我整個文本加載到1個變量與

with open('path/to/file', 'r') as content_file: 
    content = content_file.read() 

我想正則表達式似乎找到正確的出發點,但我不能得到正確的終點。它或者匹配1行,根本不匹配任何內容或者一直匹配文件末尾。

match = re.search(r'(^createNode mentalrayOptions)(.*\n)(^\t)' ,content, flags=re.DOTALL) 
+1

你能證明你試過的嗎? – Jerry

+0

您是否試圖使用RegEx解析CFG? – Hyperboreus

+0

我正試圖從瑪雅文件中刪除多餘的節點塊 – Panupat

回答

3

你可以使用這樣的事情:

^keyword.*(?:\n^\t.*)* 

標誌:

  • m爲mutiline,所以^作品。因此.與新行不匹配。

說明:

  • ^keyword - 開始與keyword
  • .*行 - 匹配直到行
  • (?:\n^\t.*)*的端部 - 每個這些匹配另一行以標籤開始的。請注意,我們希望與新行匹配,因此請注意您是否有其他行分隔符。

工作例如:http://www.regex101.com/r/jP8yH0

當然,如果你試圖匹配的代碼真正塊,這樣可以很快失敗 - 例如,通過評論或字符串文字。

+0

謝謝。我如何指定多個標誌? – Panupat

+1

@Panupat你在這裏只需要一個標誌,'flags = re.MULTILINE'。你做**不需要** Singleline/Dotall - 這將打破模式。當你需要它時,你可以使用按位或來設置多個標誌:'re.IGNORECASE | re.MULTILINE'。 – Kobi