मैं यह जानने के बिना स्ट्रिंग से सभी HTML टैग कैसे हटा सकता हूं?


122

क्या सभी HTML टैग या किसी भी HTML को स्ट्रिंग से संबंधित हटाने का कोई आसान तरीका है?

उदाहरण के लिए:

string title = "<b> Hulk Hogan's Celebrity Championship Wrestling &nbsp;&nbsp;&nbsp;<font color=\"#228b22\">[Proj # 206010]</font></b>&nbsp;&nbsp;&nbsp; (Reality Series, &nbsp;)"

उपरोक्त वास्तव में होना चाहिए:

"हल्क होगन की सेलेब्रिटी चैम्पियनशिप कुश्ती [प्रोज # 206010] (वास्तविकता श्रृंखला)"


यह प्रश्न दोहराव के कारण बंद है लेकिन सुझाए गए उत्तर को Html Agility Pack का उपयोग करके दिया गया है। यदि आप Html Agility pack का उपयोग करके html टैग हटाना चाहते हैं, तो आप यहाँ मेरे उत्तर का उल्लेख कर सकते हैं stackoverflow.com/a/30026043/2318354 । जो किसी एक के लिए सहायक हो सकता है
दिलीप ०१५

6
यह डुप्लिकेट नहीं है, जैसा कि "HTML चपलता पैक - सामग्री को हटाए बिना अवांछित टैग हटा रहा है?" कुछ टैग रखना चाहते हैं (यानी, वैध टैग की सूची दें, बाकी को हटा दें)। यह प्रश्न यहां सभी टैग हटाने के बारे में है। और मैं अन्य प्रश्न के उत्तर का उपयोग नहीं कर सकता क्योंकि मैं अस्तित्व में सभी HTML टैगों की सूची में पास नहीं होने जा रहा हूं।
थिएरी_एस

Xidel पर एक नज़र डालें । यह आपको वहाँ से 95% तक ले जाएगा xidel -s input -e '/'
जोश हबदास

जवाबों:


247

आप इस तरह से एक साधारण रेगेक्स का उपयोग कर सकते हैं:

public static string StripHTML(string input)
{
   return Regex.Replace(input, "<.*?>", String.Empty);
}

ज्ञात हो कि इस समाधान का अपना दोष है। देखें स्ट्रिंग में स्थित निकालें HTML टैग (विशेष रूप से @mehaase की टिप्पणी) अधिक जानकारी के लिए

एक अन्य समाधान HTML चपलता पैक का उपयोग करना होगा ।
आप यहां पुस्तकालय का उपयोग करके एक उदाहरण पा सकते हैं: HTML चपलता पैक - सामग्री को हटाए बिना अवांछित टैग को हटा रहा है?


2
इनपुट के लिए काम नहीं करता है: '7 <10 <b> लेकिन </ b> 30> 10' यह देता है: '7 लेकिन 30> 10'
बार्टोज़ पिएर्ज़ेक्लिविज़

हां, क्योंकि यह आपके मामले में <और> के बीच सब कुछ छीन लेता है, < 10 <b>और </b>दोनों को छीन लिया जाता है।
बिडौ

2
विधि नाम StripHtml () नहीं होना चाहिए क्योंकि विधि के नाम पास्कल मामले का उपयोग करना चाहिए?
डेविड क्लेम्फनर

यदि आप सुरक्षा कारणों से इसका उपयोग कर रहे हैं तो इसके लिए नियमित अभिव्यक्ति का उपयोग करना एक अच्छा विचार नहीं है।
मथियास लिकेगार्ड लोरेनजेन

3
बस रेगेक्स को <[a-zA-Z /] * में बदल दें?>
ब्रैंडन प्रुडेंट

54

आप Html Agility पैक का उपयोग करके स्ट्रिंग को पार्स कर सकते हैं और इनरटेक्स्ट प्राप्त कर सकते हैं।

    HtmlDocument htmlDoc = new HtmlDocument();
    htmlDoc.LoadHtml(@"<b> Hulk Hogan's Celebrity Championship Wrestling &nbsp;&nbsp;&nbsp;<font color=\"#228b22\">[Proj # 206010]</font></b>&nbsp;&nbsp;&nbsp; (Reality Series, &nbsp;)");
    string result = htmlDoc.DocumentNode.InnerText;

मुझे InnerTextसमाधान पसंद है क्योंकि यह सभी टैग को हटा देता है। लेकिन ... यह पीछे छोड़ देता है &nbsp;और <!-- xxx --> उन टैग्स को भी टिप्पणी करता है जैसे कि आसपास के लोग v:shapetype, v:shapeया v:imagedataसाथ में [if gte vml 1]या[if !vml]
Thierry_S

7
मुझे पता है कि &nbsp;एक HTML इकाई है, एक टैग नहीं है, इसलिए इसे हटाने के लिए एक समाधान result = WebUtility.HtmlDecode(result);और टिप्पणी नोड्स को हटाने के लिए, Html Agility Pack का उपयोग कर सकते हैं: करने से htmlDoc.DocumentNode.SelectNodes("//comment()")?.ForEach(c=> c.Remove());ठीक पहलेresult = htmlDoc.DocumentNode.InnerText;
Thierry_S

3

आप नीचे दिए गए कोड का उपयोग अपनी स्ट्रिंग पर कर सकते हैं और आपको html भाग के बिना पूरा स्ट्रिंग मिलेगा।

string title = "<b> Hulk Hogan's Celebrity Championship Wrestling &nbsp;&nbsp;&nbsp;<font color=\"#228b22\">[Proj # 206010]</font></b>&nbsp;&nbsp;&nbsp; (Reality Series, &nbsp;)".Replace("&nbsp;",string.Empty);            
        string s = Regex.Replace(title, "<.*?>", String.Empty);
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.