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

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

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

Мне нужно отправлять личные сообщения людям из небольшого списка на одном форуме. За один раз можно отправлять сообщения пяти пользователям. Но, у некоторых из них приём сообщений отключён, у некоторых ящик заполнен. Если сообщение не удаётся отправить - сайт выводит приблизительно такой блок с ошибкой:
Листинг программы
  1. <div class="blockbody errorblock">
  2. <h3 class="blocksubhead">При размещении сообщения были допущены следующие ошибки:</h3>
  3. <ul class="blockrow error">
  4.  
  5. <li>Вы не можете отправить сообщение username, поскольку он(а) решил(а) не принимать личные сообщения, либо ему(ей) не разрешена эта опция.</li>
  6. </ul>
  7. </div>
Текст сообщения об ошибке - может быть разным. Мне нужно знать есть ли на странице page сообщение об ошибке, и если есть - то вытянуть оттуда username, на которое ругается сайт. Мне известны пять вариантов username: username1, username2, username3, username4, username5. Если ошибка и будет - то в <ul class="blockrow error"></ul> будет одно из этих пяти имён. Вообще в тупике. Тут и многострочность, и один из нескольких вариантов. Помогите, пожалуйста, составить регулярное выражение, для решения этой ситуации. А может можно обойтись без них?

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

textual
Листинг программы
  1. string GetErrorUserName(string html)
  2. {
  3.    string[] users = {"vasya", "vasya13",...} // список пользователей
  4.    Regex regex = new Regex(@"<ul class=""blockrow error\"">.+</ul>", RegexOptions.Singleline);
  5.   string result = regex.Match(html); //Получили ошибку
  6.  
  7.   if (!result.Success)
  8.      return null;
  9.  
  10.   string value = regex.Value;
  11.   foreach(string user in users)
  12.      if (value.Contains(user))
  13.         return user;
  14.   return "Unknown user";
  15. }

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


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

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

6   голосов , оценка 4.167 из 5

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

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

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