查找大型文本节
本文关键字:文本 大型 查找 | 更新日期: 2023-09-27 18:19:28
有人知道在c#中找到一种方法来查找给定的非常大的字符串,以查找具有大于25个字母数字连续字符的随机文本部分吗?
我试过循环每个字符,但太慢了。
使用正则表达式:
MatchCollection matches = Regex.Matches(inputString, @"'w{25,}");
foreach(Match match in matches)
{
Console.WriteLine(match.Value);
}
'w
表示"任何字母数字字符",{25,}
表示"至少重复25次"
C#已经优化了IndexOf
方法,但对您来说可能还不够?
var haystack = "The collected works of shakespeare";
var needle = "work";
var index = haystack.IndexOf(needle);
正则表达式是否适合您的需求?类似的东西
您可以使用正则表达式。例如,以下代码:
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);
将在屏幕上写入CCD_ 4和CCD_。['w]
是任何字母数字字符,包括数字。(如果你使用拉丁字母表,并且不想包含数字,你可以用[A-Za-z]
代替){3,}
部分的意思是"前面的3个或更多"。
但这将找到所有匹配项,而不仅仅是随机部分。不过,对于大多数目的来说,它应该足够快。(当然比逐个字符迭代更快)如果不是,你可以尝试r.Matches(s, index)
来查找索引后出现的匹配,索引是一个小于s.Length
的随机整数
如果你想找到所有匹配项,然后在其中随机选择一个样本,但发现正则表达式太慢,你可以尝试实现Boyer-Moore字符串搜索算法(基本思想是,如果非字母数字字符出现在第25个位置,那么不需要检查前24个字符,只需跳到第50个位置并检查即可),但可能无论如何都无法击败内置正则表达式。