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