2010-06-04 61 views
0

我有一個表達式($ ASMLNA $ * $ TSM $ * 8 *($ GrossDownTarget $ * $ 005930K $)+ 15)

現在我試圖讓所有的變量介於$ $之間。示例$ ASMLNA $所以對我來說它應該給ASMLNA。

我一直在使用正則表達式嘗試,這是我能夠做到至今

 
    Regex r = new Regex(@"[^\$]"); 

     string Contents = txtRegEx.Text.Trim(); 
     MatchCollection ImageCollection = r.Matches(Contents); 
     string tempContents = string.Empty; 
     foreach (Match match in ImageCollection) 
     { 
      tempContents+= match.Value; 
     } 

這將是巨大的,如果有人能在正確的方向指向我。

+0

是什麼讓你覺得你需要在這裏使用正則表達式?爲什麼不只是迭代字符串中的一個字符,並將開始和結束位置保存到一個'LinkedList '(或者你可以有兩個:一個用於開始,一個用於結束),然後通過無正則表達式代碼呢? – 2010-06-04 14:21:12

回答

3

試試這個正則表達式:

(?<=\$)\b[^$]+\b(?=\$) 

如果你的變量只能包含字字符([a-zA-Z0-9_]),這個表達式會更好:

(?<=\$)\w+(?=\$) 
+0

這也會返回字符串 - 例如 - 第二個和第三個'$',它不會? – exhuma 2010-06-04 14:13:37

+0

@exhuma:我相信你是對的,我用'\ b'更新了它,這似乎是有效的,給出了上面的示例數據。謝謝。 – Senseful 2010-06-04 14:16:33

0

你的表情只在開始時相匹配的$字符串。要獲得羣組,我認爲你需要這樣的東西:@「(\ $。+?\ $)」

編輯:糟糕。我錯過了關於剝離$的一點。試試這個版本:\ $(。+?)\ $