2013-04-10 24 views
4

我想從Ruby中的Fortran代碼中提取符號。符號將具有以下模式(注:變量類型和屬性部分已經被過濾掉了):如何使用正則表達式匹配前面沒有「=」的單詞?

a = b, c(2)  ! Match result should be "a" and "c" 
d(3) = [1,2, & ! Match result should be "d" 
    3] 

,我已經嘗試了正則表達式是((?<!=)\w+(?![^\[]*\]+)(?=(|,|\(|$)))lookaround東西。但由於lookbehind的限制,我無法匹配「= *」排除b

我用Rubular進行測試。爲了您的方便,請參閱here

在此先感謝!

+0

沒有辦法僞造可變長度向後看的正則表達式的味道,不支持它。 – Tomalak 2013-04-10 07:29:42

+0

@Tomalak:是的,我對這個收縮感到失望。正如「爆炸藥丸」所表明的那樣,我們可以先對這些字符串進行預處理。 – 2013-04-10 07:32:48

+0

Ruby不支持的其他有用的東西是佔有量詞。 – Tomalak 2013-04-10 07:45:15

回答

2

爲了使您的正則表達式的工作,你可以先更換所有尾隨空格後=

.gsub(/=\s+/, '=').scan(/((?<!=)\w+(?![^\[]*\]+)(?=(|,|\(|$)))/) 
+0

是的,這個伎倆應該工作! – 2013-04-10 07:27:40

0

你可以做的一件簡單的事情是將行分成兩部分('='),並且只對左操作數執行你的正則表達式。

這樣你就不必編寫任何複雜的正則表達式。

+0

感謝您的諮詢!但是在一行中可能有幾個「=」。 – 2013-04-10 07:28:35

0

我的建議是將你的正則表達式分成2個表達式。正則表達式不一定總是一行一行。

相關問題