c# - 使用与序列匹配两次的正则表达式从 xml 中删除空元素

标签 c# regex xml replace

我希望从 XML 文件中删除空元素,因为读者需要一个值。这不是零 xsi:nil="true"或没有内容的元素 <Element /> Deserialize Xml with empty elements in C# 。但是 Element 的内部部分根本缺失 <Element></Element>

我尝试编写自己的代码来删除这些元素,但我的代码太慢而且文件太大。每个项目的末尾也将包含此模式。因此以下正则表达式将删除有效的 xml:
@"<.*></*>

我需要某种正则表达式来确保两个 * 的模式相同。

所以:

<Item><One>1</One><Two></Two><Three>3</Three></Item>

会变成:

<Item><One>1</One><Three>3</Three></Item>

因此,事实上,它都是一行,这让事情变得更加困难,因为这意味着该项目的结尾正好在“三”的结尾之后,从而产生了我想要寻找的模式。

我无权访问允许重新创建有效 xml 的原始数据。

最佳答案

您想要capture一个或多个word characters里面< ... >
并使用 \1 匹配结束标记反向引用第一组捕获的内容。

<(\w+)></\1>

See demo at regex101

关于c# - 使用与序列匹配两次的正则表达式从 xml 中删除空元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34901181/

相关文章:

c# - 我在C# “The type or namespace name does not exist in namespace”中收到错误

sql - PostgreSQL 中的正则表达式替换

regex - 需要正则表达式帮助 (preg_match_all)

xml - 文档在运行时在自定义 xslt 映射中没有根元素,但在调试中没有

C# 在新线程中调用方法

c# - 正则表达式获取匹配后的文本,该文本必须是最后一次出现

C# Prism导航问题

java - Java 中的 replace() 和 replaceAll()

Android XML 定义的维度值产生意外结果

java - Android更改错误验证文本字段的颜色