数组的正则表达式

时间:2014-01-07 21:19:59

标签: vb.net

我有这段代码

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 个答案:

答案 0 :(得分:0)

您可以使用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,则只需使用多行lambda表达式,如下所示:

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)