查找大型文本节

本文关键字:文本 大型 查找 | 更新日期: 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个位置并检查即可),但可能无论如何都无法击败内置正则表达式。