Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在.NET中提取字符串_C#_.net_Vb.net - Fatal编程技术网

C# 在.NET中提取字符串

C# 在.NET中提取字符串,c#,.net,vb.net,C#,.net,Vb.net,我有一个字符串如下所示: var expression = @"Args("token1") + Args("token2")"; IList<String> expression = new List<String> { "token1", "token2" }; var collection = expression.Select(s => Args(s)); 我想检索表达式中包含在参数中的字符串集合 在C或VB.NET中如何执行此操作?如果您的收藏如

我有一个字符串如下所示:

var expression = @"Args("token1") + Args("token2")";
 IList<String> expression = new List<String> { "token1", "token2" };


var collection = expression.Select(s => Args(s));
我想检索表达式中包含在参数中的字符串集合


在C或VB.NET中如何执行此操作?

如果您的收藏如下所示:

var expression = @"Args("token1") + Args("token2")";
 IList<String> expression = new List<String> { "token1", "token2" };


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

如果您的收藏如下所示:

var expression = @"Args("token1") + Args("token2")";
 IList<String> expression = new List<String> { "token1", "token2" };


var collection = expression.Select(s => Args(s));
如果需要令牌1和令牌2,可以使用以下正则表达式

input=@"Args(""token1"") + Args(""token2"")"
MatchCollection matches = Regex.Matches(input,@"Args\(""([^""]+)""\)");
对不起,如果这不是你要找的

如果需要令牌1和令牌2,可以使用以下正则表达式

input=@"Args(""token1"") + Args(""token2"")"
MatchCollection matches = Regex.Matches(input,@"Args\(""([^""]+)""\)");
对不起,如果这不是你要找的

Regex:

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);
}
正则表达式:

非正则表达式假定字符串格式正确!:

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);
}

还有另一种正则表达式方法可以实现这一点,即使用前向和后向断言:

    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部分,只给出了标记。

还有另一种正则表达式方法可以实现这一点,使用lookahead和lookahead断言:

    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部分,只给出了标记。

嗨,迈克尔,我想你误解了这个问题。这是我的错,表达式实际上是一个具有该值的字符串。好吧,我不确定你想要什么,我假设你我们正在尝试从字符串列表创建转换Arg调用。Shi michael,我想你误解了这个问题。我的错误是,表达式实际上是一个具有该值的字符串。好吧,我不确定您想要什么,我假设您正在尝试从要添加的字符串列表创建转换Arg调用,我的问题是否有非正则表达式解决方案?谢谢Imm..,我想逐字符解析会更困难。是的,我同意,我一开始担心.Net的正则表达式的性能,所以我推测非正则表达式的解决方案会更快。。。看起来还不错……忘了补充一下,我的问题有没有非正则表达式的解决方案?谢谢Imm..,我想逐字符解析会更困难。是的,我同意,我一开始担心.Net的正则表达式的性能,所以我推测非正则表达式的解决方案会更快。。。看起来还不错。。。