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

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

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

Мне нужно отправлять личные сообщения людям из небольшого списка на одном форуме. За один раз можно отправлять сообщения пяти пользователям. Но, у некоторых из них приём сообщений отключён, у некоторых ящик заполнен. Если сообщение не удаётся отправить - сайт выводит приблизительно такой блок с ошибкой:
<div class="blockbody errorblock">
    <h3 class="blocksubhead">При размещении сообщения были допущены следующие ошибки:</h3>
    <ul class="blockrow error">

    <li>Вы не можете отправить сообщение username, поскольку он(а) решил(а) не принимать личные сообщения, либо ему(ей) не разрешена эта опция.</li>
 
    </ul>
</div>
Текст сообщения об ошибке - может быть разным. Мне нужно знать есть ли на странице page сообщение об ошибке, и если есть - то вытянуть оттуда username, на которое ругается сайт. Мне известны пять вариантов username: username1, username2, username3, username4, username5. Если ошибка и будет - то в <ul class="blockrow error"></ul> будет одно из этих пяти имён. Вообще в тупике. Тут и многострочность, и один из нескольких вариантов. Помогите, пожалуйста, составить регулярное выражение, для решения этой ситуации. А может можно обойтись без них?

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

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

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


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

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

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