Как извлечь совпадения строк с помощью регулярного выражения из списка? - PullRequest
1 голос
/ 11 ноября 2019

У меня есть список, содержащий несколько строк, таких как эта и другие данные.

  HwndWrapper[App.exe;;cda6c3f4-8c87-4b12-8f3d-5322ca90eeex]
  HwndWrapper[App.exe;;cadac3f4-8c87-4b12-8q3d-1qwe2ca90eec]
  HwndWrapper[App.exe;;c1b6a3s4-8c87-4b12-8f3d-2qw2ca90eeev]

Мой список: // Возвращает список объектов WindowInformation с дескрипторами, заголовками, классами, // родителями, детьми,Братья и сестры и информация о процессе

 List<WindowInformation> windowListExtended = WindowList.GetAllWindowsExtendedInfo();

Обычное выражение для совпадения:

  HwndWrapper\[App.exe;;.*?\]

Теперь для каждого совпадения в списке. Мне нужно извлечь соответствующую строку и запустить процесс с каждой извлеченной строкой, Foreach или чем-то в этом роде.

Некоторая помощь, пожалуйста.

Обновление: спасибо Altaris за помощь, просто нужно преобразовать List встрока

        var message = string.Join(",", windowListExtended);
        string pattern = @"HwndWrapper\[LogiOverlay.exe;;.*?]";
        MatchCollection matches = Regex.Matches(message, pattern);

Ответы [ 2 ]

2 голосов
/ 11 ноября 2019

Из того, что я понимаю, вы хотите извлечь каждое совпадение в отдельный список для работы, вот и вы:

            var someList = new List<string>{"HwndWrapper[App.exe;;cda6c3f4-8c87-4b12-8f3d-5322ca90eeex]",
                                    "HwndWrapper[App.exe;;cadac3f4-8c87-4b12-8q3d-1qwe2ca90eec]",
                                    "HwndWrapper[App.exe;;c1b6a3s4-8c87-4b12-8f3d-2qw2ca90eeev]"};

            Regex FindHwndWrapper = new Regex(@"HwndWrapper\[App.exe;;(.*)\]");

            var matches = someList.Where(s => FindHwndWrapper.IsMatch(s)).ToList();

            foreach(var match in matches)
            {
                Console.WriteLine(match);// Use values
            }

Я использовал System.Linq функцию Where() для итерации по списку

Используйте эту строку Linq, если вам нужны только идентификаторы, например "cda6c3f4-8c87-4b12-8f3d-5322ca90eeex"

var matches = someList.Select(s => FindHwndWrapper.Match(s).Groups[1]).ToList();
1 голос
/ 11 ноября 2019

Я не уверен, что именно вы хотите, я думаю, что вы хотите извлечь эти

        List<string> windowListExtended = new List<string>();
        windowListExtended.Add("HwndWrapper[App.exe;;cda6c3f4-8c87-4b12-8f3d-5322ca90eeex]");
        windowListExtended.Add("HwndWrapper[App.exe;;cadac3f4-8c87-4b12-8q3d-1qwe2ca90eec]");
        windowListExtended.Add("HwndWrapper[App.exe;;c1b6a3s4-8c87-4b12-8f3d-2qw2ca90eeev]");

        var myRegex = new Regex(@"HwndWrapper\[App.exe;;.*?]");
        var resultList = files.Where(x => myRegex.IsMatch(x)).Select(x => x.Split(new[] { ";;","]" }, StringSplitOptions.None)[1]).ToList();

        //Now resultList contains => cda6c3f4-8c87-4b12-8f3d-5322ca90eeex, cadac3f4-8c87-4b12-8q3d-1qwe2ca90eec, c1b6a3s4-8c87-4b12-8f3d-2qw2ca90eeev
        foreach (var item in resultList)
        {
            //Do whatever you want
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...