C# Regex, чтобы получить текст между двумя тегами? - PullRequest
0 голосов
/ 24 марта 2020

Хорошо, у меня возникли трудности с заменой текста в этом файле конфигурации. Раздел, который я пытаюсь заменить ...

    <!-- 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);

Кажется, это не похоже на подбор матча, я думаю, потому что символы новой строки, но я не уверен.

Может ли кто-то пу sh меня в правильном направлении?

1 Ответ

0 голосов
/ 24 марта 2020

Как прокомментировано, вы должны использовать 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>";

Ваш шаблон не нуждается в вопросительном знаке, так как * уже "равен нулю или более соответствует"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...