2016-09-23 125 views
2

我一直在試圖設計這個正則表達式,但對於我的生活,我不能讓它不匹配,如果* /被擊中特殊的單詞之前。正則表達式匹配整個多行註釋包含特殊字

我想匹配整個多行註釋,只要它包含一個特殊的單詞。我嘗試了負面的lookaheads /後面,但我無法弄清楚如何正確地做到這一點。

這是我到目前爲止有: (?s)(/\*.+?special.+?\*/)

我是關閉或可怕的關閉基地?我試過包括(?!\*/)失敗。

https://regex101.com/r/mD1nJ2/3

編輯:我有一些多餘的部分我刪除了正則表達式。

回答

2

你不是完全關閉基地:(!介意改性劑,例如x詳細模式)

/\*     # match /* 
(?:(?!\*/)[\s\S])+? # match anything lazily, do not overrun */ 
special    # match special 
[\s\S]+?   # match anything lazily afterwards 
\*/     # match the closing */ 

該技術被稱爲回火貪婪的象徵,看到a demo on regex101.com


您可能想嘗試另一種方法:分析您的文檔,grep註釋(使用例如 BeautifulSoup)並在其上運行字符串函數( if "special" in comment...)。

+1

Python're'支持're.DOTALL'修飾符,不需要使用'[\ s \ S]'解決方法,只需要點就可以。看,OP已經在使用dotall標誌'(?s)'的內聯版本。 –

+0

@WiktorStribiżew:我認爲更多的是一種習慣 - 我認爲''DOTALL''同樣會好。 – Jan

+0

@WiktorStribiżew謝謝! – Lithium2142

相關問題