繁体   English   中英

查找大文本部分

[英]Finding Large Text Sections

有谁知道在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);

正则表达式符合您的需求吗? 类似于\\ w {25,}

您可以使用正则表达式。 例如,以下代码:

 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);

将在屏幕上写defghij [\\w]是任何字母数字字符,包括数字。 (如果您使用拉丁字母并且不想包含数字,则可以用[A-Za-z]代替) {3,} part的意思是“前面的3个或更多”。

但这会找到所有匹配项,而不仅仅是随机部分。 对于大多数目的,它仍然应该足够快。 (肯定比逐个char迭代要快)。如果不是,则可以尝试r.Matches(s, index)查找在index之后发生的匹配,其中index是小于s.Length的随机整数。

如果您要查找所有匹配项,然后从其中随机选择一个样本,但发现正则表达式太慢,则可以尝试实施Boyer-Moore字符串搜索算法(基本思想是,如果非字母数字字符出现在第25位,那么就无需检查前24个字符,只需跳一下并检查第50个字符即可),但是无论如何,它可能不会超过内置的正则表达式。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM