Регулярное выражение работает только для строки с дословными литералами - 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);