有没有人知道c#中有一种方法可以找到一个非常大的字符串来查找大于25个字母数字的连续字符的随机文本部分?
我已尝试循环使用每个字符,但速度太慢。
答案 0 :(得分:3)
使用正则表达式:
MatchCollection matches = Regex.Matches(inputString, @"\w{25,}");
foreach(Match match in matches)
{
Console.WriteLine(match.Value);
}
\w
表示“任何字母数字字符”,{25,}
表示“至少25次重复”
答案 1 :(得分:1)
C#优化了IndexOf
方法,但对您来说仍然不够?
var haystack = "The collected works of shakespeare";
var needle = "work";
var index = haystack.IndexOf(needle);
答案 2 :(得分:1)
正则表达式适合您的需求?类似于\ w {25,}
的东西答案 3 :(得分:0)
您可以使用正则表达式。例如,以下代码:
string s = "a b c def ghij";
Regex r = new Regex(@"\w{3,}", RegexOptions.Compiled);
var result = r.Matches(s);
foreach (Match m in result)
Console.WriteLine(m.Value);
会在屏幕上写下def
和ghij
。 [\w]
是任何字母数字字符,包括数字。 (如果您使用拉丁字母并且不想包含数字,则可以使用[A-Za-z]
替换){3,}
部分表示“前面的3个或更多”。
但是这会找到所有匹配,而不仅仅是随机部分。对于大多数用途来说,它应该足够快。 (当然比通过char迭代char更快)如果没有,你可以尝试r.Matches(s, index)
查找索引后发生的匹配,索引是一个小于s.Length
的随机整数
如果你想找到所有匹配项,然后在它们中随机选择一个样本但是找到正则表达式太慢你可以尝试实现Boyer-Moore字符串搜索算法(基本思路是,如果非字母数字字符出现在第25个位置,然后没有必要检查前24个字符,只是跳跃和chech第50个位置),但无论如何可能不会打造正则表达式。