c# - 如何使用正则表达式清理 XML 属性?

标签 c# xml regex

我想从我的 XML 结构中删除所有属性。我的选择是正则表达式,但如果有更简单的方法,我欢迎提出建议。

为了挑选出一个固定的标签,我使用了以下内容。

String clean = Regex.Replace(filled, ".*?<holder[^>]*?>(.*?)</holder>.*?", "$1");

这给了我标签持有者的内容。我现在想保留文本质量,但省略内部标签中的所有属性。我尝试了以下方法。

String plain1 = Regex.Replace(clean, "(<[^>]*?>)(.*?)(</[^>]*?>)", "$1$2$3");
String plain2 = Regex.Replace(clean, "(<[a-zA-Z]*?)([^>]*?)(>)", "$1$3");

但它返回相同的内容 (plain1) 和没有原始名称的空标签 (plain2)。什么都没有被清理,或者一切都被清理了。我做错了什么?

我注意到改变 start 为 plus,给我的标签只包含名字的第一个字母,所以我很确定下面的方法是正确的,只要我能做到$1 的部分最大。我该怎么做?

String plain3 = Regex.Replace(clean, "(<[a-zA-Z]+?)([^>]*?)(>)", "$1$3");

最佳答案

您需要跳过第一个括号中的问号。

String plain3 = Regex.Replace(clean, "(<[a-zA-Z]+)([^>]*?)(>)", "$1$3");

一些观察。

  • 您需要处理结束标记。您现在正在跳过斜杠字符。
Regex.Replace(clean, "(<[/a-zA-Z]+)([^>]*?)(>)", "$1$3");
  • 你不需要$2$3 也不是。
Regex.Replace(clean, "(<[a-zA-Z]+)[^>]*?>", "$1>");
  • 在正则表达式中有更好的方式来表达“只有字母”。
Regex.Replace(clean, @"(<[\w]+)([^>]*?)(>)", "$1$3");

所以最后,您可能会得到以下结果。

Regex.Replace(clean, @"(<[/\w]*)[^>]*?>", "$1>");

关于c# - 如何使用正则表达式清理 XML 属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15592973/

相关文章:

javascript - 通过angularjs登录时MVC更新 ` __RequestVerificationToken` token

c# - 从文件加载错误c#

c++ - 当守护进程通过 inetd 运行时,xerces-c 库函数返回 NULL

xml - 在内存中处理大型 XML 文档

java - 使用正则表达式,是否可以使用 'Followed by' 或 'Preceded by' 等表达式

javascript - 如何在 Javascript 中使用正则表达式提取可选查询参数

javascript - 正则表达式 (JS) — 匹配任何 5 个字符的组合,但忽略 5 个字符的重复

c# - .Net Core 中的脚手架与解决方案中的多个项目

c# - 在 C# 中,+= 和 =+ 之间有什么区别吗?

android - 动态中心对齐 ViewPager