2010-04-04 71 views
0

我想使用Python和正則表達式計算包含在C代碼中的評論字符,但沒有成功。我可以先刪除字符串以擺脫字符串中的註釋,但是這也會在註釋中刪除字符串,並且結果將會很糟糕。有沒有機會通過使用正則表達式來匹配註釋中的字符串,反之亦然?在評論中的字符串和字符串的評論

+1

這是不應該使用正則表達式的東西之一,我相信 – 2010-04-04 20:47:09

回答

6

不,不是真的。

正則表達式不是像你描述的那樣解析嵌套結構的正確工具;相反,你需要解析C語法(或者你感興趣的「啞子」),你可能會發現正則表達式有幫助。一個相對簡單的具有三種狀態(CODE,STRING,COMMENT)的狀態機就可以做到。

+2

您可能需要字符常量的第四個狀態。在C中,文本「/ *」是一個多字符字符常量;它有未定義或實現定義的行爲,但不會發起評論。 – 2010-04-04 20:58:49

2

可以去掉,通過搜索的正則表達式是不評論的所有字符串:

'[^'\r\n]+'|(//.*|/\*(?s:.*?)\*/) 

,並替換:

$1 

從本質上講,這個搜索正則表達式string|(comment)這匹配字符串或註釋,捕獲註釋。如果匹配字符串,或者評論匹配,那麼替換或者不是。

儘管正則表達式不能替代真正的解析器,但您可以通過創建一個巨大的正則表達式來交替所有您感興趣的令牌(本例中爲註釋和字符串),從而快速構建一個基本的解析器。如果您要編寫一些代碼來處理註釋,但不是字符串中的代碼,請遍歷上述正則表達式的所有匹配項,並在第一個捕獲組中參與匹配時對其中的字符進行計數。