Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex VB.Net:正则表达式_Regex_Vb.net - Fatal编程技术网

Regex VB.Net:正则表达式

Regex VB.Net:正则表达式,regex,vb.net,Regex,Vb.net,我正在创建一个应用程序,它可以告诉我谁登录了我工作的制造中心的哪台电脑 我正在使用psexec的psloggedoncmd进程为我获取信息,并使用VB.net windows应用程序向我显示信息 我首先查询当前所有活动PC的数据库,并将数据转储到datagridview对象中。(如下所示) 一旦我的datagridview对象填写了我所有的活动PC,我就可以使用机器名运行psloggedon cmd来获取谁登录了。我这样做是通过使用: Private Sub execute(sender As

我正在创建一个应用程序,它可以告诉我谁登录了我工作的制造中心的哪台电脑

我正在使用psexec的psloggedoncmd进程为我获取信息,并使用VB.net windows应用程序向我显示信息

我首先查询当前所有活动PC的数据库,并将数据转储到datagridview对象中。(如下所示)

一旦我的datagridview对象填写了我所有的活动PC,我就可以使用机器名运行psloggedon cmd来获取谁登录了。我这样做是通过使用:

Private Sub execute(sender As Object, e As EventArgs) Handles bntExecuteCmd.Click

    'COUNT ENTRIES
    Dim RowCount As Integer = datagridView1.RowCount
    ''EXECUTE CMD
    For i = 0 To RowCount - 2
        'PERFORM PSLOGGEDON ROUTINE
        Dim Proc1 As New Process
        Proc1.StartInfo = New ProcessStartInfo("psloggedon")
        Proc1.StartInfo.Arguments = "-l \\" & datagridView1.Rows(i).Cells(1).Value & ""
        Proc1.StartInfo.RedirectStandardOutput = True
        Proc1.StartInfo.UseShellExecute = False
        Proc1.StartInfo.CreateNoWindow = True
        Proc1.Start()

        If Not Proc1.WaitForExit(300) Then
            Proc1.Kill()
        End If

        'INSERT RESULTS INTO LOGGEN_IN COLUMN
        Dim msg As String = Proc1.StandardOutput.ReadToEnd
        Dim idx As Integer = msg.LastIndexOf("\"c)
        Dim user As String = msg.Substring(idx + 1)
        Dim final As String = UCase(System.Text.RegularExpressions.Regex.Replace(user, "^ELP.*$", ""))
        datagridView1.Rows(i).Cells(2).Value = final
    Next
End Sub
最后,我的问题是:
要获取员工姓名,我必须使用正则表达式,因为原始格式是不可接受的

原始格式:
“正在连接到\ELPSC171698的注册表

本地登录的用户: ECHOSTAR\Jane.Doe“

申请后的格式:

'INSERT RESULTS INTO LOGGEN_IN COLUMN  

        Dim msg As String = Proc1.StandardOutput.ReadToEnd
        Dim idx As Integer = msg.LastIndexOf("\"c)
        Dim user As String = msg.Substring(idx + 1)
        Dim final As String = UCase(System.Text.RegularExpressions.Regex.Replace(user, "^ELP.*$", ""))
        datagridView1.Rows(i).Cells(2).Value = final  
“保拉,罗德里格斯”

看起来不错,对吧?但是,当原始格式有多个关联时,如下所示:

“正在连接到\elpsc17368的注册表

本地登录的用户: ECHOSTAR\John.Doe ECHOSTAR\Ben.Doe“

我写的代码将使我成为列表中的最后一个人。在这种情况下,我会在需要找BEN.DOE的时候找JOHN.DOE

现在的问题是:如何更改此代码:

'INSERT RESULTS INTO LOGGEN_IN COLUMN  

        Dim msg As String = Proc1.StandardOutput.ReadToEnd
        Dim idx As Integer = msg.LastIndexOf("\"c)
        Dim user As String = msg.Substring(idx + 1)
        Dim final As String = UCase(System.Text.RegularExpressions.Regex.Replace(user, "^ELP.*$", ""))
        datagridView1.Rows(i).Cells(2).Value = final  
要从这里找到第一个人“JOHN.DOE”:

“正在连接到\elpsc17368的注册表

本地登录的用户: ECHOSTAR\John.Doe ECHOSTAR\Ben.Doe“


我希望我的问题清楚明了,结构合理。谢谢。

使用更具体的正则表达式和捕获组来获取多个项目

    Dim mc As MatchCollection = Regex.Matches("Users logged on locally: ECHOSTAR\John.Doe ECHOSTAR\Ben.Doe", "[\t ]+[a-z_0-9]+\\(?<n>[a-z_\.0-9]+)(([\t ])|($))", RegexOptions.ExplicitCapture Or RegexOptions.IgnoreCase Or RegexOptions.Multiline)
    For Each m As Match In mc
        Dim name As String = m.Groups("n").value
    Next
改变

Dim idx As Integer = msg.LastIndexOf("\"c)

P>可考虑如下:

假设您首先验证了字符串

Dim user As String = msg.Split({"\"c, " "c}, StringSplitOptions.RemoveEmptyEntries)(1) _
                     .Replace("."c, " "c).ToUpper
要保留小数点,只需删除
。替换(“'c”,“c)

Dim idx As Integer = msg.LastIndexOf("\"c)
Dim idx As Integer = msg.IndexOf("\"c)
Dim user As String = msg.Split({"\"c, " "c}, StringSplitOptions.RemoveEmptyEntries)(1) _
                     .Replace("."c, " "c).ToUpper