Я использую WinForms NET 2.0 в C #.
У меня есть текстовые файлы, около 1000-1500 строк.Некоторые строки в них начинаются с 4 или более буквенных слов, и я должен добавить двоеточие к этим словам.Наличие пробела в начале этих строк не является обязательным, и строка может содержать больше текста, кроме этих слов.Вот пример:
lda $00,x
mov $20
rep #$20
tax
lda #$0000,y
word
... ; comment
anotherword ; this word has whitespace before it.
Кроме того, если двоеточие уже есть, оно просто игнорирует их, чтобы предотвратить добавление новых.Вот мой код:
Regex R = new Regex(@"^\s*(?<word>[A-Za-z0-9_]{4,})", RegexOptions.Multiline); //keep the words stored in a group called word
MatchCollection M = R.Matches(txt); //let my text file string be "txt"
foreach (Match m in M)
{
string mm = m.Groups["word"].Value;
if (!Regex.IsMatch(txt, @"^\s*\b" + mm + @"\b:", RegexOptions.Multiline)) // if already a colon, return
txt = Regex.Replace(txt, @"^\s*\b" + mm + @"\b", mm + ":", RegexOptions.Multiline);
}
Работает и все, но проблема?Это слишком медленно.Я выполняю другие операции в текстовом файле, но я подтвердил, что они быстрые, и проблема заключается в двух "\ s *" в моем регулярном выражении выше.Когда я удаляю их обоих, поиск становится в 10 раз быстрее.
Как я могу это исправить?