Удалите все строки в {} разделителе, используя Regex или Html Agility Pack в веб-формах ASP.NET

Я пытаюсь извлечь текст только с веб-страницы и отображаться, и я использую HtmlAgilityPack, чтобы выполнить извлечение текста, но текст возвращается с текстом javascript и css, и я не хочу этого, поэтому я пытаясь обнаружить {} разделитель, чтобы удалить всю строку в {} разделителе, чтобы удалить весь текст javascript и css из возвращаемого текста, и я использую регулярное выражение для этого, но не работает, потому что у меня есть вложенный {}, и это мой regex, с которым я пытаюсь:

string regex = "\t|\n|<.*?>|(\\[.*\\])|(\".*\")|('.*')|(\\(.*\\))|{\\[.*\\]}|{\".*\"}|{'.*'}|{\\(.*\\)}";
TextArea1.Value = Regex.Replace(s, regex, "");

Текст ввода:

Los Angeles Times - California, national and world news - Los Angeles Times;},svginImg:function;a.onload=function{var a=navigator.userAgent||navigator.vendor||window.opera;return/;},isIE9:function==9;}},notmobileCalccheck:function;a.style.cssText=;return !!a.style.length;},isAndroidBrowser:function{var a=navigator.userAgent||navigator.vendor;return/android/i.test&&!window.opera;},isSupportedBrowser:function&&!window.opera;},getScreenWidth:function;},isSupported:function isSupported{a=sessionStorage==;}else{try{a=this.supportsSvg{a=false;}}if<=8;}};trb.utils.redirect=function;b.name=;document.body.appendChild;b.submit;if{localStorage=d;}else{for{var c={};for{c;}return null;},remove:function remove;localStorage.removeItem{var b=localStorage;if;a=),f;for;}}},remove:function remove{a.trb=a.trb||{};trb.data=trb.data||{};trb.data.isMobile=trb.browsersupport.isMobile;trb.data.isIE9=trb.browsersupport.isIE9;trb.data.facebookAppId=;trb.data.parentSectionPath=);}if;}trb.data.isSectionFront=true;if;}trb.data.videos={};trb.data.videos.ndnFallbackJsURL=;trb.data.initialpathname=;trb.data.pages=trb.data.pages||{};trb.data.pages={};trb.data.pages.unsupportedBrowserPath=;trb.svg={};trb.svg.data={};trb.svg.data.svgStrings={};trb.svg.data.svgStrings.logoShort=;trb.svg.data.svgStrings.logo=;trb.svg.data.svgStrings.loadingCircle=;trb.svg.data.map={mastheadLogo:{colors:{PRIMARY_COLOR:},string:trb.svg.data.svgStrings.loadingCircle}}; { background: #404040; } .trb_allContentWrapper { background: #333; }

Ответ 1

Я использовал HtmlAgilityPack для загрузки веб-страницы и извлечения текстового содержимого только тогда, когда я загружаю страницу и извлекаю текст, текст CSS и javascript также извлекается, поэтому я пытаюсь использовать этот метод регулярного выражения для удаления javascript и css из выходного текста, обнаружив {} разделитель, но был трудным, поэтому я пытаюсь использовать его, и он работает намного проще, используя Descendants() из HtmlAgilityPack, а мой код

 HtmlWeb web = new HtmlWeb();
 HtmlDocument doc = web.Load(url);
 doc.DocumentNode.Descendants()
                            .Where(n => n.Name == "script" || n.Name == "style" || n.Name == "#comment")
                            .ToList()
                            .ForEach(n => n.Remove());

            string s = doc.DocumentNode.InnerText;
            TextArea1.Value = Regex.Replace(s, @"\t|\n|<.*?>","");

и найдите это: ЭТА ССЫЛКА

и теперь все работает.

Ответ 2

почему бы вам просто не попробовать:

/\{.*?\}/g

и ничего не замените.

Ответ 3

Вы хотите сопоставить весь случай '{' to '}', включая каждый символ, который не является '}' между парой, а затем используйте следующее:

/\{[^\}]+\}/g

Ответ 4

У вас есть вложенные фигурные скобки.

В Perl, PHP, Ruby вы можете сопоставить вложенные фигурные скобки с помощью (?R) (синтаксис рекурсии). Но .NET не имеет рекурсии. Означает ли это, что мы потеряны? К счастью, нет.

Балансирующие группы для спасения

С# regex не может использовать рекурсию, но имеет удивительную функцию, называемую балансировочными группами.

Это регулярное выражение будет соответствовать полным вложенным скобкам.

(?<counter>{)(?>(?<counter>{)|(?<-counter>})|[^{}]+)+?(?(counter)(?!))

Например, он будет соответствовать

  • {sdfs{sdfs}sd{d{ab}}fs}
  • {ab}
  • Но не {aa

Ответ 5

int x=0, y=0;
int l=string.lastIndexOf("}");
do
{
x= string.indexof("{", x) + 1;
y= string.indexof{"}", x};
string.remove(x, y-x);
}
while(y!=l);