如果string包含substring,则将整个字符串收集到“space”delimeter

时间:2016-11-23 11:52:32

标签: .net c#-4.0

我必须在整个SQL存储过程中搜索某些字符串。过程中的每一行都已输入到数组中的数组位置。我需要做的是搜索数组中的每个条目以查找某个子字符串,在这种情况下,我想搜索“EXEC SP_MYSP_”。 (这是所有存储过程如何作为前缀的示例。)如果字符串包含“EXEC SP_MYSP_”,那么我想增加一个计数器(这很容易),但我还想将存储过程名称添加到列表中。有没有办法读取剩余的存储过程名称,并在我点击空格分隔符后停止读取?如果有人能提供一些非常感谢的建议!

代码相当简单,但我会添加它,以防它帮助任何人看到我上面要解释的内容。

if (stringValue.Contains("EXEC SP_MYSP_"))
{
    count++;

    //Get the entire stored procedure name.
}

1 个答案:

答案 0 :(得分:0)

// using System.Text.RegularExpressions;

private Regex pattern = new Regex(@"EXEC SP_MYSP_([^\s]+)", RegexOptions.IgnoreCase);

private bool TryMatchName(string input, out string name)
{
    var match = pattern.Match(input);
    if (match.Success)
    {
        name = match.Groups[1].Value;
        return true;
    }
    else
    {
        name = null;
        return false;
    }
}

然后按如下方式调用此方法:

const string input = "EXEC SP_MYSP_FOO 1, 2, 3;";
string name;
bool nameFound = TryMatchName(input, out name);

正则表达式EXEC SP_MYSP_([^\s]+)具有以下含义:

  • 匹配文字子字符串EXEC SP_MYSP_
  • 后跟一个或多个(+)字符,这些字符不是([^…])任何空白字符(\s),
  • 并捕获组中的部分输入((…)),以便可以使用match.Groups提取。