Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
 Аватар для Dr_FvKE
14 / 11 / 1
Регистрация: 16.08.2016
Сообщений: 75

Поиск элементов второго списка в первом (регулярным выражением)

12.04.2022, 16:14. Показов 824. Ответов 6

Студворк — интернет-сервис помощи студентам
Салют всем гуру

Вопрос следующего характера:
Есть два списка (тип ListBox), в первом находятся поисковые фразы с Яндекса и Гугла, это особой роли не играет, просто чтоб было представление, что за данные там находятся. Во втором списке находятся минус-слова, это слова, наличие которых запрещено в первом списке. Под "наличием" подразумевается присутствия слова целиком, то есть слово может находиться в начале строки, имя пробел справа; в конце строки, имея пробел слева; в середине фразы, имя пробелы по обе стороны, а так же слово может являться единственным в проверяемой фразе.

Примеры, когда слово должно быть найдено:
  • word
  • lorem ipsum word
  • word lorem ipsum
  • lorem word ipsum

Примеры, когда слово НЕ должно быть найдено:
  • lorem ipsumword
  • wordlorem ipsum
  • loremwordipsum

Я накидал два варианта регулярного выражения, но, как вы могли догадаться, работает весьма криво:
  1. (^|\s+)word($|\s+)
  2. (\s+)word(\s+)

Знаю, можно прикрутить Linq для исключения циклов, но на прототипе решил нагляднее сделать:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
private async void RegexEvent()
{
    lbRegex.Items.Clear();
    List<string> finds = new List<string>();
    await Task.Run(() =>
    {
        int ischecked = default;
        foreach (string itemSearch in lbSearch.Items)
        {
            foreach (string itemMin in lbMin.Items)
                if (Regex.IsMatch(itemSearch, $@"(\s+){itemMin}(\s+)") && !lbRegex.Items.Contains(itemSearch))
                {
                    finds.Add(itemSearch);
                    break;
                }
        }
    });
    lbRegex.Items.AddRange(finds.ToArray());
}
Добавлено через 16 минут
Использовал также маску: \bword\b (безуспешно)
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
12.04.2022, 16:14
Ответы с готовыми решениями:

Поиск регулярным выражением
Всем доброго утра. Помогите пожалуйста составить регулярное выражение для поиска такой штуки: ИЗВЕСТНО - заранее известное слово, в...

Поиск слова регулярным выражением
Добрый день. Есть строка: ---- Hi nickname, Sorry to hear you\ ---- Нужно вытащить регуляркой nickname, причем на практике он может...

Поиск регулярным выражением единственного соответствия
Есть регулярка &lt;div class=\&quot;q\&quot;&gt;*&lt;hr class=\&quot;iq\&quot;&gt;, но она ищет до последнего &lt;hr class=\&quot;iq\&quot;&gt;, то есть получается лишь одно соответствие,...

6
 Аватар для iLinks
800 / 458 / 237
Регистрация: 03.01.2017
Сообщений: 1,339
12.04.2022, 17:35
Лучший ответ Сообщение было отмечено Dr_FvKE как решение

Решение

Наверное как-то так:
C#
1
Regex regex = new Regex(@"(?:^|[^\wа-яА-Я])(word)(?:$|[^\wа-яА-Я])");
0
 Аватар для Dr_FvKE
14 / 11 / 1
Регистрация: 16.08.2016
Сообщений: 75
12.04.2022, 17:58  [ТС]
Цитата Сообщение от iLinks Посмотреть сообщение
Regex regex = new Regex(@"(?:^|[^\wа-яА-Я])(word)(?:$|[^\wа-яА-Я])");
Можно, пожалуйста, комментарий по маске?
0
 Аватар для iLinks
800 / 458 / 237
Регистрация: 03.01.2017
Сообщений: 1,339
12.04.2022, 18:05
C#
1
2
3
4
5
6
7
8
9
10
11
Regex regex = new Regex(@"(?: # незахватываемая группа
                              ^ # признак начала строки
                              | # или
                              [^\wа-яА-Я] # что угодно, кроме любых английских букв, цифр и любых русских букв
                          )
                          (word) # захватываемая группа со словом, которое ищем
                          (?: # незахватываемая группа
                              $ # признак конца строки
                              | # или
                              [^\wа-яА-Я] # что угодно, кроме любых английских букв, цифр и любых русских букв
                          )", RegexOptions.IgnorePatternWhitespace);
0
 Аватар для Dr_FvKE
14 / 11 / 1
Регистрация: 16.08.2016
Сообщений: 75
12.04.2022, 18:10  [ТС]
Спасибо большое за содержательное описание

Цитата Сообщение от iLinks Посмотреть сообщение
RegexOptions.IgnorePatternWhitespace
Это указание отсутствует в первом сообщении, оно обязательно при такой маске (если убрать комментарии)?

Документация (IgnorePatternWhitespace):
Исключить неэкранированные пробелы из шаблона и включить комментарии после символа решетки (#).
0
 Аватар для iLinks
800 / 458 / 237
Регистрация: 03.01.2017
Сообщений: 1,339
12.04.2022, 18:20
Цитата Сообщение от Dr_FvKE Посмотреть сообщение
если убрать комментарии
Если убрать комментарии, то эта опция не нужна, поэтому, в первом сообщении, я ее и не написал.
1
 Аватар для Dr_FvKE
14 / 11 / 1
Регистрация: 16.08.2016
Сообщений: 75
12.04.2022, 18:34  [ТС]
Спасибо, проблема решена
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
12.04.2022, 18:34
Помогаю со студенческими работами здесь

Поиск регулярным выражением фрагмента текста с пустой строкой
Столкнулся со следующей проблемой: есть книга в виде HTML, в которой главы представлены так: &lt;h2&gt;Глава 1&lt;/h2&gt; &lt;div...

Поиск соответствия содержания текстового поля с регулярным выражением не абсолютно
Добрый день! Помогите разобраться с регулярными выражениями, никогда до конца их не понимал. Необходимо в поле ввести ФИО через...

Преобразование элементов массива регулярным выражением
Дан массив Он имеет строки и число. Любой элемент, который содержит буквы нужно удалить. Пробелы удалить(знаю что можно...

Объединить два списка в один так, чтобы элементы второго списка, которые есть в первом, в новом списке не были
Prolog Добавлено через 1 минуту Умные люди, помогите пожалуйста!!!!!! Мне на прологе нужно реализовать такую задачу: есть два списка...

с регулярным выражением.
Имеем текст youtube.com/watch?v=LOZuxwVk7TU&amp;ob=av2em нужно получить то что находится между /watch?v= и &amp; в нашем случае...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Хочу заставить корпорации вкладываться в здоровье сотрудников: делаю мат модель здравосохранения
anaschu 22.03.2026
e7EYtONaj8Y Z4Tv2zpXVVo https:/ / github. com/ shumilovas/ med2. git
1С: Программный отбор элементов справочника по группе
Maks 22.03.2026
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа. В качестве фильтра для отбора справочника служит группа номенклатуры. Отбор по наименованию группы. . .
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
1С: Программный отбор элементов справочника по значению перечисления
Maks 21.03.2026
Установка программного отбора элементов справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит значение перечислений. / / Событие "НачалоВыбора" реквизита на форме. . .
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru