搜索子字符串的字符串

时间:2010-08-10 18:14:09

标签: c# regex

我需要搜索特定子字符串的大字符串。子字符串将以Testing=开头,但双引号内的所有内容都可能不同,因为它是用户登录。

所以我需要的子串的例子是

Testing="network\smithj"  

Testing="network\rodgersm"  

我的要求有意义吗?我怎么能在C#中做到这一点?

3 个答案:

答案 0 :(得分:10)

这是正则表达式的一个很好的应用。

"Testing=\"[^\"]*\""

你会像这样使用它:

Regex reg = new Regex("Testing=\"[^\"]*\"");
string login = reg.Match(yourInputString).Groups[0].Value;

上述内容适用于您的两个测试用例。

维基百科有一篇关于Regular Expressions的精彩文章,如果您不熟悉它们的话。如果您search google,您可以找到有关如何在C#中使用正则表达式的大量信息。

答案 1 :(得分:9)

类似的东西:

const string Prefix = "Testing=\"";

static string FindTestingSubstring(string text)
{
    int start = text.IndexOf(Prefix);
    if (start == -1)
    {
        return null; // Or throw an exception
    }
    int end = text.IndexOf('\"', start + Prefix.Length);
    if (end == -1)
    {
        return null; // Or throw an exception
    }
    return text.Substring(start + Prefix.Length, end - start - Prefix.Length);
}

另一种方法是使用正则表达式 - 但是当模式相当简单时,我个人更喜欢简单的字符串操作。这取决于你对正则表达式的舒适程度:)

答案 2 :(得分:0)

如果您要搜索的字符串非常大,则可能不想使用正则表达式。正则表达式匹配相对较慢,通常会检查每个字符。相反,查找Boyer-Moore字符串匹配算法,该算法通常只检查一小部分字符。 string.IndexOf(string)的CLR实现可能会也可能不会使用此算法 - 您必须检查。

啊,这里有一些与基准测试结果有用的链接:http://www.arstdesign.com/articles/fastsearch.html