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

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

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

Я очень мало знаком с регулярными выражениями. Подозреваю, что не вижу чего то очевидного. Вот код примера:
class Program
    {
        static void Main(string[] args)
        {
            string msg = @"<tr>\r\n<f>v</f>\r\n</tr><tr>\r\n<f>v</f>\r\n</tr>";
            ConvertToFormattedMessages(msg, "tr");
            Console.ReadKey();
        }
 
        public static void ConvertToFormattedMessages(string msg, string separator)
        {
            string pattern = string.Format("<{0}>(.*?)</{0}>", separator);
 
            MatchCollection matches = Regex.Matches(msg, pattern);
            
            foreach (Match match in matches)
            {
                Console.WriteLine(match.ToString());
            }
        }
 
    }
Результат ожидаем:
{<tr>\r\n<f>v</f>\r\n</tr>} {<tr>\r\n<f>v</f>\r\n</tr>}
Если же убрать символ @:
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
Листинг программы
MatchCollection matches = Regex.Matches(msg, pattern, RegexOptions.Singleline);

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


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

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

7   голосов , оценка 4.143 из 5
Похожие ответы