C#正则表达式在标签之间找到特定的字符

时间:2016-03-03 09:21:36

标签: c# regex

真的刚开始使用正则表达式而且只能做基本的事情。

我想将XML文件的元素标记中的连字符转换为下划线。我已经有一个c#应用程序,它使用查找和替换元素读取配置文件,并在RegEx中执行其他一些清理工作,但无法解决这个问题

所以目前它将作为

进入
  

< convert-there-here>但不是这些< / convert-these-here>

我希望它吐出来

  

< convert_these_here>但不是这些< / convert_these_here>

C#脚本jut吸入文件并逐行读取,它不会将其视为xml文件

所以基本上我认为我只需要一个模式来寻找任何和所有连字符BETWEEN a<和>

由于

1 个答案:

答案 0 :(得分:2)

抛弃正则表达式。解析XML并修复它。使用XDocument类可以非常简单。

假设我们从以下XML文档开始:

<this-is>
  <an-xml>
    <doc but-I="remain-untouched">look-at-me</doc>
  </an-xml>
</this-is>

我们可以将其加载到XDocument并修复元素名称。

var str = "<this-is><an-xml><doc but-I=\"remain-untouched\">look-at-me</doc></an-xml></this-is>";
var xdoc = XDocument.Parse(str);
foreach(var el in xdoc.Descendants())
{
    var name = el.Name.LocalName;
    name = name.Replace("-", "_");
    el.Name = el.Name.Namespace + name;

}
var fixedXmlString = xdoc.ToString();

现在这给了我们以下内容:

<this_is>
  <an_xml>
    <doc but-I="remain-untouched">look-at-me</doc>
  </an_xml>
</this_is>