Регулярные выражения из массива

У меня есть этот код

Public Class Form1
 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
 GetAllServices1()
End Sub

Private Sub GetAllServices1()
 Dim services As ServiceProcess.ServiceController() = ServiceProcess.ServiceController.GetServices
 Array.ForEach(services, Sub(s) ListBox1.Items.Add(s.DisplayName))
End Sub

Что отлично подходит для перечисления всех служб на локальном компьютере.

Теперь то, что я хотел бы сделать, это использовать выражения reqular для перечисления только того, что я ищу. В зависимости от версии программного обеспечения имена служб могут отличаться

Так что-то вроде этого

Private Sub GetAllServices1()
 Dim services As ServiceProcess.ServiceController() = ServiceProcess.ServiceController.GetServices
 Dim pattern As String = "(vmu\.? |wua\.? |W3S\.? )"
 If (service name matches pattern) then
 Array.ForEach(services, Sub(s) ListBox1.Items.Add(s.DisplayName))
 End if
End Sub

Любая помощь будет принята с благодарностью.

1 ответ

Вы можете использовать метод Regex.IsMatch для проверки каждого элемента в массиве, например:

Dim r As New Regex("(vmu\.? |wua\.? |W3S\.? )")
For Each i As ServiceProcess.ServiceController In services
 If r.IsMatch(i.DisplayName) Then
 ListBox1.Items.Add(i.DisplayName)
 End If
Next

Или, если вы предпочитаете использовать Array.ForEach, вам просто нужно использовать многострочное лямбда-выражение, например:

Dim r As New Regex("(vmu\.? |wua\.? |W3S\.? )")
Array.ForEach(services, Sub(s)
 If r.IsMatch(s.DisplayName) Then
 ListBox1.Items.Add(s.DisplayName)
 End If
 End Sub)

licensed under cc by-sa 3.0 with attribution.