Поиск одинаковых строк по регулярке в списке и удаление их. C#

irving zisman

Client
Регистрация
18.05.2017
Сообщения
187
Благодарностей
19
Баллы
18
Помогите накатать сниппет, нехватет знаний как его правильно написать. Сама суть:

Есть список в котором хранятся строки типа:

Вася. вышел в магазин
Петя. сел поесть
Саша. вынес мусор
Петя. любит кошек

Нужно сначала регуляркой взять имя (все до точки), сравнить его со всем списком, и удалить все строки где содержится это имя, получится:

Вася. вышел в магазин
Саша. вынес мусор

или

Вася. вышел в магазин
Петя. сел поесть
Саша. вынес мусор

Оба вариант подходят, т.е можно удалить все дубли или 1 строку оставить
 
Последнее редактирование:

RoyalBank

Client
Регистрация
07.09.2015
Сообщения
367
Благодарностей
300
Баллы
63
C#:
string name = "Вася";

List<string> lst = new List<string>();
lst.AddRange(new string[]{"Вася. вышел в магазин","Петя. сел поесть","Саша. вынес мусор","Петя. любит кошек"});

for (int i = 0; i < lst.Count(); i++) if (lst[i].ToLower().Contains(name.ToLower())) lst.RemoveAt(i);
 

irving zisman

Client
Регистрация
18.05.2017
Сообщения
187
Благодарностей
19
Баллы
18
C#:
string name = "Вася";

List<string> lst = new List<string>();
lst.AddRange(new string[]{"Вася. вышел в магазин","Петя. сел поесть","Саша. вынес мусор","Петя. любит кошек"});

for (int i = 0; i < lst.Count(); i++) if (lst[i].ToLower().Contains(name.ToLower())) lst.RemoveAt(i);
Спасибо! Но это не то. В списке может быть тысячи строк, разного содержания, но каждая строка всегда начинается с какого-либо слова, затем точка и далее текст. Нужно в цикл все записывать, типа берем первую строку, парсим все до точки, ищем есть ли совпадения по всему списку, если есть удаляем строку в которой было совпадение, если нет берем вторую строку и проделываем все тоже самое и так пока не закончатся все строки
 

RoyalBank

Client
Регистрация
07.09.2015
Сообщения
367
Благодарностей
300
Баллы
63
Спасибо! Но это не то. В списке может быть тысячи строк, разного содержания, но каждая строка всегда начинается с какого-либо слова, затем точка и далее текст. Нужно в цикл все записывать, типа берем первую строку, парсим все до точки, ищем есть ли совпадения по всему списку, если есть удаляем строку в которой было совпадение, если нет берем вторую строку и проделываем все тоже самое и так пока не закончатся все строки
C#:
List<string> lst = new List<string>();
lst.AddRange(new string[]{"Вася. вышел в магазин","Петя. сел поесть","Саша. вынес мусор","Петя. любит кошек"});

List<string> names = new List<string>();
names.AddRange(new string[]{"Вася", "Саша"});

names.ForEach(n => {
    for (int i = 0; i < lst.Count(); i++)
        if (Regex.Match(lst[i], @".*(?=\.)").Value.Trim().ToLower().Contains(n.ToLower())) lst.RemoveAt(i);
});
 

irving zisman

Client
Регистрация
18.05.2017
Сообщения
187
Благодарностей
19
Баллы
18
Спасибо @Dimionix

C#:
IZennoList list = project.Lists["List"];

lock (SyncObjects.ListSyncer) {
    for (int i = 0; i < list.Count; i++) {
        for (int j = i + 1; j < list.Count; j++) {
            if (list[i].Split('.')[0] == list[j].Split('.')[0]) {
                list.RemoveAt(j); j--;
            }
        }
    }
}
 

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