Регулярное выражение работает только для строки с дословными литералами - C#

Узнай цену своей работы

Формулировка задачи:

Я очень мало знаком с регулярными выражениями. Подозреваю, что не вижу чего то очевидного. Вот код примера:
Листинг программы
  1. class Program
  2. {
  3. static void Main(string[] args)
  4. {
  5. string msg = @"<tr>\r\n<f>v</f>\r\n</tr><tr>\r\n<f>v</f>\r\n</tr>";
  6. ConvertToFormattedMessages(msg, "tr");
  7. Console.ReadKey();
  8. }
  9. public static void ConvertToFormattedMessages(string msg, string separator)
  10. {
  11. string pattern = string.Format("<{0}>(.*?)</{0}>", separator);
  12. MatchCollection matches = Regex.Matches(msg, pattern);
  13. foreach (Match match in matches)
  14. {
  15. Console.WriteLine(match.ToString());
  16. }
  17. }
  18. }
Результат ожидаем:
{<tr>\r\n<f>v</f>\r\n</tr>} {<tr>\r\n<f>v</f>\r\n</tr>}
Если же убрать символ @:
Листинг программы
  1. string msg = "<tr>\r\n<f>v</f>\r\n</tr><tr>\r\n<f>v</f>\r\n</tr>";
то Regex.Matches ничего не вернет. Т.е. получается, что текст с кодами переноса строк и возврата каретки искаться не будет, а текст без этих кодов ищется нормально. Собственно почему так и как сделать так, чтобы регулярное выражение корректно срабатывало на строке без @ или экранирования спецсимволов. P.S.: я не занимаюсь парсингом HTML! Просто пытаюсь понять почему так происходит в таком простом случае.

Решение задачи: «Регулярное выражение работает только для строки с дословными литералами»

textual
Листинг программы
  1. MatchCollection matches = Regex.Matches(msg, pattern, RegexOptions.Singleline);

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 4.143 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы