提取字符串我有一個字符串,它看起來像這樣:在.NET
var expression = @"Args("token1") + Args("token2")";
我想要檢索的strings
集合括在Args("")
的表達。
我怎麼會做這在C#或VB.NET?
提取字符串我有一個字符串,它看起來像這樣:在.NET
var expression = @"Args("token1") + Args("token2")";
我想要檢索的strings
集合括在Args("")
的表達。
我怎麼會做這在C#或VB.NET?
沒有爲實現這一點,利用先行和回顧後另一個正則表達式的方法斷言:
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部分,只給出令牌。
如果您的收藏看起來是這樣的:
IList<String> expression = new List<String> { "token1", "token2" };
var collection = expression.Select(s => Args(s));
只要參數數量返回相同類型的查詢集合類型這應該沒關係
那麼你可以遍歷集合,像這樣
foreach (var s in collection)
{
Console.WriteLine(s);
}
喜邁克爾, 我想你誤解了這個問題。我的錯在那個部分,表達式實際上是一個具有該值的字符串。 – cless 2009-11-26 02:41:22
好了,不知道你想要什麼,我以爲你我們正在試圖創建一個字符串列表轉換你的「精氨酸()」呼叫 – 2009-11-26 02:45:09
如果你想token1
token2
,您可以使用正則表達式如下
[email protected]"Args(""token1"") + Args(""token2"")"
MatchCollection matches = Regex.Matches(input,@"Args\(""([^""]+)""\)");
對不起,如果這不是你在找什麼。
正則表達式:
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);
}
非常感謝!在S. Mark的解決方案中,我必須執行令牌的提取... – cless 2009-11-26 08:57:18