Удалить тег объекта из моего HTML - PullRequest
0 голосов
/ 16 ноября 2009

Я пытаюсь удалить тег объекта из текстового файла:

    <object classid=""clsid:F08DF954-8592-11D1-B16A-00C0F0283628"" id=""Slider1"" width=""100"" height=""50"">
  <param name=""BorderStyle"" value=""1"" />
  <param name=""MousePointer"" value=""0"" />
  <param name=""Enabled"" value=""1"" />
  <param name=""Min"" value=""0"" />
  <param name=""Max"" value=""10"" />
</object>

Мое регулярное выражение до сих пор:

hmtl = Regex.Replace (html, @ "] > (?:. ?)?", "", RegexOptions.IgnoreCase);

Внутренние теги параметров не удаляются.

Ответы [ 3 ]

1 голос
/ 16 ноября 2009

Вы должны быть в состоянии указать тег <object> как часть вашего выражения и сопоставлять все до тега </object>.

Regex.Replace(html, @"<object.*?</object>", "", RegexOptions.Singleline);
0 голосов
/ 16 ноября 2009

Этот RegEx может работать для вас (он очень жадный):

<object.+</object>

Но я бы посоветовал использовать HtmlAgilityPack .
Он предоставляет возможность использовать DOM HTML.
Таким образом, вы будете работать с ним так же, как с XmlDocument:

HtmlDocument doc = new HtmlDocument();
doc.Load("file.htm");
foreach(HtmlNode obj in doc.DocumentElement.SelectNodes("object") {
    obj.Parent.RemoveChild(obj);
}
doc.Save("file.htm");
0 голосов
/ 16 ноября 2009

Если я понимаю, что вы спрашиваете, это сделает это:

$line =~ s/<object.*?>.*?<\/object>//is;

Это Perl, поэтому потенциальные причуды:

  • ? указывает на не жадное совпадение, т. Е. Оно должно соответствовать первому возможному завершению шаблона, а не последнему
  • / i без учета регистра
  • / s говорит, что весь текст должен обрабатываться как одна строка (чтобы иметь возможность совпадать при переносе строк)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...