C#, Как удалить комментарии XML/HTML с регулярным выражением

Разговор, поскольку кто-то, кто провел 18 месяцев, работая в отображающейся компании, которая включала работу над алгоритмом маршрутизации... да, Dijkstra , действительно работает с несколькими модификациями:

  • Вместо того, чтобы делать Dijkstra однажды от источника до dest, Вы запускаете в каждом конце и разворачиваете обе стороны, пока они не встречаются в середине. Это устраняет примерно половину работы (2*pi* (r/2) ^2 по сравнению с pi*r^2).
  • , Чтобы постараться не исследовать глухие переулки каждого города между Вашим источником и местом назначения, у Вас может быть несколько слоев данных карты: 'магистральный' слой, который содержит только магистрали, 'вторичный' слой, который содержит только вторичные улицы и т.д. Затем Вы исследуете только меньшие разделы более подробных слоев, расширяясь по мере необходимости. Очевидно, это описание не учитывает много детали, но Вы получаете идею.

С модификациями вдоль тех строк, можно сделать даже маршрутизацию по пересеченной местности в очень разумный период времени.

18
задан MicMit 20 August 2009 в 05:04
поделиться

3 ответа

Вместо этого замените его на RegExOptions.Singleline , и он будет работать нормально. Если не в однострочном режиме, точка соответствует любому символу , кроме новой строки.

Обратите внимание, что Singleline и Multiline не являются взаимоисключающими. Они делают две разные вещи. Процитируем MSDN:

Многострочный режим . Меняет значение ^ и $, чтобы они совпадали в начале и конец, соответственно, любой строки, а не только начало и конец вся строка

Однострочный режим . Изменения значение точки (.), так что это соответствует каждому символу (вместо каждый символ, кроме \ n).

Другие люди уже предлагали HTML Agility Pack. Я просто почувствовал, что у вас должно быть объяснение, почему ваше регулярное выражение не работает :)

26
ответ дан 30 November 2019 в 07:39
поделиться

Пожалуйста, не делайте этого • Используйте регулярные выражения для работы с языками разметки - вам нужно использовать более совершенный инструмент, созданный для такого рода задач.

Вместо этого используйте Html Agiliy Pack . Я даже нашел эту статью , в которой читатель (по имени Саймон Мурье) комментирует функцию, которая использует Html Agility Pack для удаления комментариев из документа:

Саймон Мурье сказал:

Это пример кода для удаления комментарии:

 static void Main (string [] args) 
{ 
 HtmlDocument doc = новый HtmlDocument (); 
 doc.Load ("filewithcomments.htm"); 
doc.Save (Console.Out); // показать до
 RemoveComments (doc.DocumentNode); 
doc.Save (Console.Out); // показать после
} 

static void RemoveComments (узел HtmlNode)
{
 если (! node.HasChildNodes)
 {
 возвращение;
 }

 для (int i = 0; i 
8
ответ дан 30 November 2019 в 07:39
поделиться

У меня работает этот:

<!--(\n|.)*-->

Но я думаю, вы могли бы использовать обычный XML-документ для XML или другой HtmlAgilityPack для HTML. В высшей степени , а не , рекомендующий анализировать разметку с помощью RegEx.

0
ответ дан 30 November 2019 в 07:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: