2009-11-26 21 views
1

提取字符串我有一個字符串,它看起來像這樣:在.NET

var expression = @"Args("token1") + Args("token2")"; 

我想要檢索的strings集合括在Args("")的表達。

我怎麼會做這在C#或VB.NET?

回答

1

沒有爲實現這一點,利用先行和回顧後另一個正則表達式的方法斷言:

Regex regex = new Regex("(?<=Args\\(\").*?(?=\"\\))"); 

    string input = "Args(\"token1\") + Args(\"token2\")"; 

    MatchCollection matches = regex.Matches(input); 

    foreach (var match in matches) 
    { 
     Console.WriteLine(match.ToString()); 
    } 

這剝離了字符串的Args部分,只給出令牌。

+0

非常感謝!在S. Mark的解決方案中,我必須執行令牌的提取... – cless 2009-11-26 08:57:18

0

如果您的收藏看起來是這樣的:

IList<String> expression = new List<String> { "token1", "token2" }; 


var collection = expression.Select(s => Args(s)); 

只要參數數量返回相同類型的查詢集合類型這應該沒關係

那麼你可以遍歷集合,像這樣

foreach (var s in collection) 
{ 
    Console.WriteLine(s); 
} 
+0

喜邁克爾, 我想你誤解了這個問題。我的錯在那個部分,表達式實際上是一個具有該值的字符串。 – cless 2009-11-26 02:41:22

+0

好了,不知道你想要什麼,我以爲你我們正在試圖創建一個字符串列表轉換你的「精氨酸()」呼叫 – 2009-11-26 02:45:09

1

如果你想token1token2,您可以使用正則表達式如下

[email protected]"Args(""token1"") + Args(""token2"")" 
MatchCollection matches = Regex.Matches(input,@"Args\(""([^""]+)""\)"); 

對不起,如果這不是你在找什麼。

+0

不,這正是我要找的!非常感謝! – cless 2009-11-26 02:42:30

+0

忘了補充,是有一個非正則表達式的解決我的問題?謝謝! – cless 2009-11-26 02:43:08

+0

入境事務處..,由炭焦解析會更加困難,我認爲。 – YOU 2009-11-26 02:48:41

3

正則表達式:

string expression = "Args(\"token1\") + Args(\"token2\")"; 
Regex r = new Regex("Args\\(\"([^\"]+)\"\\)"); 
List<string> tokens = new List<string>(); 
foreach (var match in r.Matches(expression)) { 
    string s = match.ToString(); 
    int start = s.IndexOf('\"'); 
    int end = s.LastIndexOf('\"'); 
    tokens.add(s.Substring(start + 1, end - start - 1)); 
} 

非正則表達式(這個假設正確的格式字符串!):

string expression = "Args(\"token1\") + Args(\"token2\")"; 
List<string> tokens = new List<string>(); 
int index; 
while (!String.IsNullOrEmpty(expression) && (index = expression.IndexOf("Args(\"")) >= 0) { 
    int start = expression.IndexOf('\"', index); 
    string s = expression.Substring(start + 1); 
    int end = s.IndexOf("\")"); 
    tokens.Add(s.Substring(0, end)); 
    expression = s.Substring(end + 2); 
}