RegExp или C# для поиска текста без учёта цикличности.

material

Client
Регистрация
23.03.2021
Сообщения
286
Благодарностей
101
Баллы
43
Приветствую.
Не знаю, как на словах объяснить, поэтому и возникла проблема, так как не понимаю, какой запрос нужно вбивать в поисковик. Опишу на примере, что нужно сделать.

Нужно найти текст только по данной маске: (начало строки всегда нет пробела=>любой символ=>пробел=>разделитель=>пробел=>любой символ)
любой символ || любой символ
1$ plus 1$ = 2$ || 1% от 2$ равно 0,02


Отрицательный поиск всё, что не соответствует маске, в том числе:
любой символ || любой символ || любой символ || любой символ || любой символ || любой символ
1$ plus 1$ = 2$ || 1% от 2$ равно 0,02 || доллар || 美元


*любой символ - это символы, буквы, цифры и всё что существует на свете.
 

material

Client
Регистрация
23.03.2021
Сообщения
286
Благодарностей
101
Баллы
43
Оплачу 5$ за готовый вариант в USDT [TRC20]. Безвозмездная помощь дело благородное, а благодарность в виде монеты ещё и приятное.
 

bigloafer

Client
Регистрация
23.07.2020
Сообщения
243
Благодарностей
76
Баллы
28
Напиши списком, из чего мы ищем и что должны найти.
 

material

Client
Регистрация
23.03.2021
Сообщения
286
Благодарностей
101
Баллы
43
Напиши списком, из чего мы ищем и что должны найти.
Немного ещё подумав над вопросом, пришли к тому, что задачу можно было решить удалением строки, если в ней повторяется разделитель два и более раза. Исключив все сложные и запутанные мысли из первого поста. Многое за последнее время было решено, через RegExp и мозг немного зациклился на нём. C# под данную задачу подошел идеально.

Сейчас напишу автору решения на C#, чтобы он поделился кодом. Обещанные в посте #post-686278 монеты ушли ему. Всем спасибо, кто размышлял над решением вопроса.
 

djaga

Administrator
Команда форума
Регистрация
26.04.2020
Сообщения
533
Благодарностей
1 111
Баллы
93
Немного ещё подумав над вопросом, пришли к тому, что задачу можно было решить удалением строки, если в ней повторяется разделитель два и более раза. Исключив все сложные и запутанные мысли из первого поста. Многое за последнее время было решено, через RegExp и мозг немного зациклился на нём. C# под данную задачу подошел идеально.

Сейчас напишу автору решения на C#, чтобы он поделился кодом. Обещанные в посте #post-686278 монеты ушли ему. Всем спасибо, кто размышлял над решением вопроса.
Спасибо.)

Можно конечно с использованием LINQ, или с помощью Regex.Matches().Count.
Но решил сделать через Split(), так как дальше может потребовать дополнительная валидация полученной подстроки и объяснить это будет проще.)

Решение:
Удалить все строки из списка в которых больше 2х разделителей:
for (var i = 0; i < project.Lists["Список 1"].Count; i++)
{
    int length = project.Lists["Список 1"][i].Split(new[] {"||"}, StringSplitOptions.None).Length;
    if (length <= 2) continue;
    project.Lists["Список 1"].RemoveAt(i);
    i = 0;
}
Приложил шаблон для наглядности ↓
 

Вложения

  • Спасибо
Реакции: material

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)