Регулярное выражение работает только для строки с дословными литералами - C#
Формулировка задачи:
Я очень мало знаком с регулярными выражениями. Подозреваю, что не вижу чего то очевидного.
Вот код примера:
Результат ожидаем:
Если же убрать символ @:
то Regex.Matches ничего не вернет.
Т.е. получается, что текст с кодами переноса строк и возврата каретки искаться не будет, а текст без этих кодов ищется нормально. Собственно почему так и как сделать так, чтобы регулярное выражение корректно срабатывало на строке без @ или экранирования спецсимволов.
P.S.: я не занимаюсь парсингом HTML! Просто пытаюсь понять почему так происходит в таком простом случае.
Листинг программы
- 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>";
Решение задачи: «Регулярное выражение работает только для строки с дословными литералами»
textual
Листинг программы
- MatchCollection matches = Regex.Matches(msg, pattern, RegexOptions.Singleline);
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д