c# - c#删除字符串的所有包装div
问题描述
我正在检查这个问题C# remove first wraping div我的问题是相似的,但我需要删除所有的包装 div,而不删除那些可能在字符串中间的。例如,我期望做的是:
Actual string:
<div><div><div><div><p>This is a test</p><ul><li>a</li><li><div>b</div></li><li>c</li></ul></div></div></div></div>
desired result after function
<p>This is a test</p><ul><li>a</li><li><div>b</div></li><li>c</li></ul>
我一直试图使这个函数递归,当它没有得到任何可删除的字符时停止调用。但是我得到 System.ArgumentOutOfRangeException: Index was out of range。当我传递一个没有 div 的字符串时出现异常
private string RemoveWrapingDiv(string html)
{
string result = string.Empty;
if (!string.IsNullOrEmpty(html))
{
var start_idx = html.IndexOf(">", html.IndexOf("<div", StringComparison.InvariantCulture), StringComparison.InvariantCulture) + 1;
var last_idx = html.LastIndexOf("</div>", StringComparison.InvariantCulture);
result = html.Substring(start_idx, last_idx - start_idx);
}
return result;
}
我的问题是,如何通过安全检查使此函数递归以避免异常?我们是否需要使其递归,还是有更简单的方法?谢谢!!
解决方案
如果您只想从字符串的开头和结尾删除 div 标记,将它们保留在中间,以及任何其他 HTML 标记,那么这应该可以工作:
private static string RemoveWrapingDiv(string originalString)
{
var openingTag = "<div>";
var closingTag = "</div>";
var processedString = originalString;
while (processedString.StartsWith(openingTag))
{
processedString = processedString.Substring(openingTag.Length, processedString.Length - openingTag.Length - closingTag.Length);
}
return processedString;
}
推荐阅读
- r - 在 R 中导出图像:Cairo 和 ggsave 增加指定尺寸
- javascript - Jest & Node:MongoError:池正在耗尽,禁止新操作
- javascript - 提交前使用jquery更改隐藏字段值
- python - Keras 中的不对称指标
- python - 在 Docker 中运行 Python 代码会给出:“/usr/bin/python3: can't find '__main__' module in 'test.py'”
- redirect - 301 重定向仅在刷新或新窗口上单击时不起作用
- c++ - 访问位于基向量中的子对象的成员
- javascript - (discord.js) 检查机器人是否有权限不起作用
- django - Wagtail Draftail 编辑器删除重叠或复合 HTML 标记边界处的空白
- sed - 使用 sed 从一个非常大的文件中删除一行