我需要搜索特定子字符串的大字符串。子字符串将以Testing=
开头,但双引号内的所有内容都可能不同,因为它是用户登录。
所以我需要的子串的例子是
Testing="network\smithj"
或
Testing="network\rodgersm"
我的要求有意义吗?我怎么能在C#中做到这一点?
答案 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