繁体   English   中英

C# 正则表达式获取两个标签之间的文本?

[英]C# Regex to get text between two tags?

好的,我在替换此配置文件中的文本时遇到了一些困难。 我正在尝试替换的部分...

    <!-- Executables we want to manage -->
  <KioskExecutables>
    <Executables>
      <add appName="Valet" exeName="365Valet.exe" startOrder="0" />
      <add appName="Sync" exeName="365Sync.exe" startOrder="1" />
      <add appName="Readiness" exeName="KioskReadiness.exe" startOrder="2" />
</Executables>
  </KioskExecutables>

我想换掉标签之间的文本。 我写了以下..

string matchCodeTag = @"<Executables>(.*?)</Executables>";
string textToReplace = File.ReadAllText(@"C:\Temp\Controller.exe.config");
string replaceWith = "<add appName=\"Disable\" exeName=\"C:\\Temp\\Disable.exe\" startOrder=\"0\" />";
string output = Regex.Replace(textToReplace, matchCodeTag, replaceWith);

不过,它似乎并没有得到匹配,我相信是因为换行符,但我不确定。

有人能把我推向正确的方向吗?

正如所评论的,您应该使用XmlDocument来解析您的配置。

但是,如果您必须使用正则表达式,则需要启用 Singleline 选项,以便点字符 (.) 也与换行符匹配,例如

string matchCodeTag = @"<Executables>(.*)</Executables>";
string textToReplace = File.ReadAllText(@"C:\Temp\Controller.exe.config");
string replaceWith = "<add appName=\"Disable\" exeName=\"C:\\Temp\\Disable.exe\" startOrder=\"0\" />";
string output = Regex.Replace(textToReplace, matchCodeTag, 
                              replaceWith, RegexOptions.Singleline);

或者您可以像这样在正则表达式模式中设置选项

string matchCodeTag = @"(?s)<Executables>(.*)</Executables>";

您的模式不需要问号,因为 * 已经是“零个或多个匹配项”

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM