我想从我的 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/