我有一个很长的字符串(数千行)。我正在针对字符串运行 RegEx 表达式并尝试识别匹配的行号。但是,如果我的匹配计数很高(例如,10,000),每次查找行号都需要再次搜索 html 字符串,这会变得很昂贵。
我想要做的是事先搜索字符串并构建行号字符位置的哈希表。所以我可以使用 Dictionary 并使用以下代码来查找我的行号。
//find line endings
int lineCount = 0;
for (int charCount = 0; charCount <= html.Length; charCount++)
{
if (html[charCount] == '\n')
{
lineCount++;
lineEndings.Add(charCount, lineCount);
}
}
但是,当我运行 RegExes 时,如何搜索这本词典?正则表达式字符位置需要在 lineEndings 字典中的两个值之间。什么是最好/最有效的方法;给定一个带有一组间隔键的字典,给定一个不在键列表中的值,找到下一个最接近的键?
我尝试过的一件事,但我不确定它会如何执行,是
lineEndings.First(n => n.Key >= match.Index).Value