Почему мое регулярное выражение не работает в C #, но работает в других текстовых редакторах? - PullRequest
2 голосов
/ 30 апреля 2019

У меня есть регулярное выражение:

Шаблон: <navPoint id="navPoi[^"]+" playOrder="[^"]+"><navLabel><text>([^<>\r\n]+)</text></navLabel><content src="([^<>\r\n]+)"/>$

Подстановка: <li id="NavPoint-#"><a href="$2">$1</a>\r\n<ol>

Работает в обычных редакторах и даже в регулярных выражениях 101: Демонстрация с вводом

Я хочу написать то же самое на C #, но когда я это делаю, это не работает.Я что-то не так делаю?

Вот мой код:

string secondPattern = @"<navPoint id=""navPoi[^""]+"" playOrder=""[^""]+""><navLabel><text>([^<>\n]+)<\/text><\/navLabel><content src=""([^<>\n]+)""\/>$";
string secondSubstitution = @"<li id=""NavPoint-#""><a href=""$2"">$1</a>\r\n<ol>";
Regex secondRegex = new Regex(secondPattern, options);
string anotherNavMap = secondRegex.Replace(newNavMap, secondSubstitution);

1 Ответ

1 голос
/ 30 апреля 2019

Вы должны убедиться, что передали опцию RegexOptions.Multiline в компиляцию регулярного выражения, и разрешите CR до $ привязки конца строки, так как $ в многострочном режиме соответствует только перед символом LF.

Кроме того, @"\r\n" - это строка из 4 символов, если вам нужен перевод строки CRLF, используйте "\r\n", поскольку дословные строковые литералы не поддерживают escape-последовательности строк.

Вот исправление кода:

string secondPattern = @"<navPoint id=""navPoi[^""]+"" playOrder=""[^""]+""><navLabel><text>([^<>\n]+)</text></navLabel><content src=""([^<>\n]+)""/>\r?$";
string secondSubstitution = "<li id=\"NavPoint-#\"><a href=\"$2\">$1</a>\r\n<ol>";
Regex secondRegex = new Regex(secondPattern, RegexOptions.Multiline);
string anotherNavMap = secondRegex.Replace(newNavMap, secondSubstitution);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...