gpt4 book ai didi

c# - 在不剥离标签的情况下获取 HTML 内容的前 100 个字符

转载 作者:太空狗 更新时间:2023-10-29 15:36:36 27 4
gpt4 key购买 nike

关于如何剥离html标签的问题很多,但关于关闭标签的函数/方法的问题却不多。

情况是这样的。我有一个 500 个字符的消息摘要(其中包括 html 标签),但我只想要前 100 个字符。问题是如果我截断消息,它可能位于 html 标记的中间……这会弄乱内容。

假设 html 是这样的:

<div class="bd">"Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. <br/>
<br/>Some Dates: April 30 - May 2, 2010 <br/>
<p>Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. <em>Duis aute irure dolor in reprehenderit</em> in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. <br/>
</p>
For more information about Lorem Ipsum doemdloe, visit: <br/>
<a href="http://www.somesite.com" title="Some Conference">Some text link</a><br/>
</div>

我将如何获取前 ~100 个左右的字符? (虽然,理想情况下,这将是“CONTENT”的前大约 100 个字符(在 html 标签之间)

我假设最好的方法是使用递归算法跟踪 html 标签并附加任何将被截断的标签,但这可能不是最好的方法。

我的第一个想法是使用递归来计算嵌套标签,当我们达到 100 个字符时,寻找下一个“<”,然后使用递归从那里编写所需的结束 html 标签。

这样做的原因是为了对现有文章做一个简短的总结,而不需要用户返回并提供所有文章的总结。如果可能,我想保留 html 格式。

注意:请忽略 html 并非完全语义化。这是我所见即所得必须处理的问题。

编辑:

我添加了一个潜在的解决方案(似乎有效)我认为其他人也会遇到这个问题。我不确定它是否是最好的...而且它可能并不完全可靠(事实上,我知道它不是),但我将不胜感激任何反馈

最佳答案

这是大多数情况下的解决方案。它不会处理不正确的 html 标签,以及像“ac”这样的情况。但它适用于我的目的,也许对其他人有帮助。

    /// <summary>
/// Gets first number of characters from the html string without stripping tags
/// </summary>
/// <param name="htmlString">The html string, not encoded, pure html</param>
/// <param name="length">The number of first characters to get</param>
/// <returns>The html string</returns>
public static string GetFirstCharacters(string htmlString, int length)
{
if (htmlString == null)
return string.Empty;

if(htmlString.Length < length)
return htmlString;

// regex to separate string on parts: tags, texts
var separateRegex = new Regex("([^>][^<>]*[^<])|[\\S]{1}");
// regex to identify tags
var tagsRegex = new Regex("^<[^>]+>$");

// separate string on tags and texts
var matches = separateRegex.Matches(htmlString);

// looping by mathes
// if it's a tag then just append it to resuls,
// if it's a text then append substing of it (considering the number of characters)
var counter = 0;
var sb = new StringBuilder();
for (var i = 0; i < matches.Count; i++)
{
var m = matches[i].Value;

// check if it's a tag
if (tagsRegex.IsMatch(m))
{
sb.Append(m);
}
else
{
var lengthToCut = length - counter;

var sub = lengthToCut >= m.Length
? m
: m.Substring(0, lengthToCut);

counter += sub.Length;
sb.Append(sub);
}
}

return sb.ToString();
}

关于c# - 在不剥离标签的情况下获取 HTML 内容的前 100 个字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2540922/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com