c# - 在字符串的所有实例前面添加一个字符

标签 c# regex string .net-2.0

我正在使用 C#。 NET 2.0 和 WinForms。

我有一段代码,其在汇编中的格式如下:

VARIABLE = 40
ADDRESS = $60

LDA VARIABLE;
STA ADDRESS;

输出应该是:

!VARIABLE = 40
!ADDRESS = $60

LDA !VARIABLE;
STA !ADDRESS;

当然,远不止这些。就像 2000 行一样,但重点是文件顶部有声明,我可以加载/保存或对它们执行任何操作。但我的问题是,我必须在所有这些声明(即使在原始代码中)“前面添加”!。

我当前的方法是这样的:

        var defs = tab.tb.GetRanges(@"^\s*([A-Za-z0-9_]+){4,255}\s*=", RegexOptions.Multiline); // all declarations are formatted like this, so use regex to get all of them
        foreach (var def in defs)
        {
            string actual = def.Text.Substring(0, def.Text.IndexOf(' ')); // remove the = sign since its not used in actual code
                txt = txt.Replace(actual, "!" + actual);
        }

但是,这种方法非常慢。 “修复”我的文件中的所有声明大约需要 3 秒钟。还有更好的办法吗?郑重声明,语法与普通文本框略有不同,因为我使用的是 http://www.codeproject.com/KB/edit/FastColoredTextBox_.aspx作为我的文本控件。

最佳答案

我怀疑您的性能问题在于对 str 进行替换。 .NET 中的字符串是不可变的,因此当您执行任何更改字符串的操作(追加、替换等)时,.NET 必须创建一个新字符串并将旧字符串复制到其中(其中全部 2000 行),再加上变化。尝试将字符串加载到 StringBuilder (可变的)中并使用其 native .Replace() 方法。

关于c# - 在字符串的所有实例前面添加一个字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8600579/

相关文章:

c# - 在文件中查找 C#

c# - 在 C# 中捕获错误时退出程序?

c# - 获取远程机器的WINDOWS路径

string - Gusfield 对动态规划算法的描述是否有错误,该算法用于寻找具有恒定空位惩罚的全局比对?

c# - 有没有办法找出DateTime变量对应的日历?

java - OpenCSV 不转义引号 (")

javascript - 为此字符串 : Dec 3, 2005 创建正则表达式

python - 当字符位于 unicode 范围内时,如何用空格填充字符?

string - sed第一行替换字符串

c# - 删除字符串中的特殊字符和无效字符