Мой XML-файл составляет около 7 Мб. Мне нужно удалить некоторые недопустимые символы из некоторых узлов. существует множество узлов, таких как «title», «country» и т. д..net Regex Search и string.replace
У меня есть 31000 совпадений для узла «title» и занимает более 35 минут. которые не приемлемы для моих требований к проекту, как можно оптимизировать этот метод
вызов
fileText = RemoveInvalidCharacters(fileText, "title", @"(&#[xX]?[A-Fa-f\d]+;)|[^\w\s\/\;\&\[email protected]]", "$1");
Определение метода
private static string RemoveInvalidCharacters(string fileText, string nodeName, string regexPattern, string regexReplacement)
{
foreach (Match match in Regex.Matches(fileText, @"<" + nodeName + ">(.*)</" + nodeName + ">"))
{
var oldValue = match.Groups[0].Value;
var newValue = "<" + nodeName + ">" + Regex.Replace(match.Groups[1].Value, regexPattern, regexReplacement) +
"</" + nodeName + ">";
fileText = fileText.Replace(oldValue, newValue);
}
return fileText;
}
Вы CRE вызова 'RemoveSpecialCharacters' но имя метода' RemoveInvalidCharacters' –
Вы можете оптимизировать это, * не используется регулярное выражение для XML разбора *. Используйте правильные инструменты, .NET имеет XML-парсеры и даже низкоуровневые читатели/писатели XML, если полноразмерные парсеры не достаточно быстры. * (Я должен удержаться от соблазна переустановить это на [this] (http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags)) *. –
Я думаю, что проблема может быть с '(. *)' Subpattern. Что делать, если вы используете 'Regex.Matches (fileText, @" <"+ nodeName + @"> ([^ <] * (?: <(?! "+ NodeName + @">) [^ <] *) *) "+ nodeName +"> ")'? –