c#
  • html
  • string
  • image
  • 2016-04-29 68 views 4 likes 
    4

    我有串HTML的圖像,例如:C#HTML字符串 - >獲取長度不HTML

    string str = "There is some nice <img alt='img1' src='img/img1.png' /> images in this <img alt='img2' src='img/img2.png' /> string. I would like to ask you <img alt='img3' src='img/img3.png' /> how Can I can I get the Lenght of the string?"; 
    

    我想獲得字符串的lenght沒有圖像和圖像的數量。所以,結果應該是:

    int strLenght = 111; 
    int imagesCount= 3; 
    

    請問您能告訴我最有效的方法嗎?

    感謝

    +0

    你可以用正則表達式的幫助下做到這一點。 請讓我知道,如果你需要解決方案基於它 –

    +0

    看看這個答案刪除HTML標記:http://stackoverflow.com/a/18154046/5119765然後,你將能夠得到字符串的長度。 –

    +1

    你最好的選擇是使用像[Html Agility Pack](https://htmlagilitypack.codeplex.com/)這樣的html解析器,這樣你就可以正確地計算內容的字符長度和圖像標籤的數量。 – juharr

    回答

    1

    如果你想用正則表達式的幫助,因爲我在評論中提及上面的去做。請使用以下代碼

    var regex = new System.Text.RegularExpressions.Regex("<img[^>]*/>"); 
    var plainString = regex.Replace(str, ""); 
    
    // plainString.length will be string length without images 
        var cnt = regex.Matches(str).Count; // cnt will be number of images 
    
    2

    我有類似的問題,並且我創建了此方法。 你可以用它來去除HTML標籤和計算你的串

    public static string StripHtmlTags(string source) 
    { 
        if (string.IsNullOrEmpty(source)) 
        { 
        return string.Empty; 
        } 
    
        var array = new char[source.Length]; 
        int arrayIndex = 0; 
        bool inside = false; 
        for (int i = 0; i < source.Length; i++) 
        { 
        char let = source[i]; 
        if (let == '<') 
        { 
         inside = true; 
         continue; 
        } 
    
        if (let == '>') 
        { 
         inside = false; 
         continue; 
        } 
    
        if (!inside) 
        { 
         array[arrayIndex] = let; 
         arrayIndex++; 
        } 
        } 
    
        return new string(array, 0, arrayIndex); 
    } 
    

    您的計數會是這樣:

    int strLength = StripHtmlTags(str).Count; 
    
    +0

    因爲'string'實現了'IEnumerable ',所以你知道你可以'foreach(char let in source)'。 – juharr

    +0

    是的,它可以絕對優化謝謝 –

    3

    我建議使用一個真正的HTML解析器,例如HtmlAgilityPack。然後,它很簡單:

    string html = "There is some nice <img alt='img1' src='img/img1.png' /> images in this <img alt='img2' src='img/img2.png' /> string. I would like to ask you <img alt='img3' src='img/img3.png' /> how Can I can I get the Lenght of the string?"; 
    
    var doc = new HtmlAgilityPack.HtmlDocument(); 
    doc.LoadHtml(html); 
    int length = doc.DocumentNode.InnerText.Length;    // 114 
    int imageCount = doc.DocumentNode.Descendants("img").Count(); // 3 
    

    這是你的樣品中DocumentNode.InnerText回報,你跳過一些空格:

    There is some nice images in this string. I would like to ask you how Can I can I get the Lenght of the string? 
    
    2

    添加(COM)引用MSHTML(Microsoft HTML對象LIB)和你可以:

    var doc = (IHTMLDocument2)new HTMLDocument(); 
    doc.write(str); 
    
    Console.WriteLine("Length: {0}", doc.body.innerText.Length); 
    Console.WriteLine("Images: {0}", doc.images.length); 
    
    0

    我喜歡約翰·史密斯的解決方案,但我不得不在最後添加Trim()相匹配的MS Word的結果。

    使用此:

    return new string(array, 0, arrayIndex).Trim(); 
    
    相關問題