首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用vb.net和PStools的正则表达式

使用vb.net和PStools的正则表达式
EN

Stack Overflow用户
提问于 2014-01-08 13:48:01
回答 2查看 74关注 0票数 0

我正在使用VB.net和PStools创建一个简单的工作程序,这样我们就可以看到一个人是否登录到多台PC上。

当我运行代码时:

代码语言:javascript
复制
Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click

    Dim Proc As New System.Diagnostics.Process
    Proc.StartInfo = New ProcessStartInfo("psloggedon")
    Proc.StartInfo.RedirectStandardOutput = True
    Proc.StartInfo.UseShellExecute = False
    Proc.StartInfo.CreateNoWindow = True
    Proc.Start()

    TextBox2.Text = Proc.StandardOutput.ReadToEnd

    Proc.Close()
End Sub

我得到的结果是:

代码语言:javascript
复制
"Users logged on locally:
     1/1/2014 4:14:43 PM        Joseph_Garza\Joseph.Garza

No one is logged on via resource shares."

然而,在它说"Joseph_Garza“的地方,它将显示我的公司的名称。

所以..。Company_name\Joseph.Garza

如何使用正则表达式获取:

代码语言:javascript
复制
1.the time and date  
2.Joseph.Garza
EN

回答 2

Stack Overflow用户

发布于 2014-01-08 13:56:42

我希望这能帮到你。

Regex.Match方法(String):http://msdn.microsoft.com/en-us/library/twcw2f1c(v=vs.110).aspx

票数 0
EN

Stack Overflow用户

发布于 2014-01-08 15:20:04

也许你可以使用正则表达式?

代码语言:javascript
复制
Users logged on locally:\s*((?:(?!\s{2,}).)*)\s*([^\\]*)\\(\S+)

regex101 demo

Users logged on locally:按字面意思匹配。

\s*匹配0个或多个空格、制表符和换行符。

((?:(?!\s{2,}).)*)这里最外面的括号用于存储捕获。内部部分是一种模式,用于匹配一行中除两个或更多空格之外的所有字符。(?!\s{2,})是阻止匹配超过2个空格的原因,并利用了负先行(?! ... ){2,}表示\s至少重复了两次。.是一个通配符,它匹配除换行符以外的所有字符。

([^\\]*)最外层的括号用于存储第二部分。内部部分是一个模式,用于匹配除反斜杠\之外的所有字符。[^ ... ]是一个被否定的类,它将匹配不在其中的所有内容。

\\匹配一个反斜杠和...

(\S+)用于匹配非空格、非换行符、非制表符,并存储匹配项。

并在VB中实现:

代码语言:javascript
复制
Imports System.Text.RegularExpressions

Module Example
   Public Sub Main()
      Dim pattern As String = "Users logged on locally:\s*((?:(?!\s{2,}).)*)\s*([^\\]*)\\(\S+)" 
      Dim input As String = "Users logged on locally:" & vbCrlf & _
                            "     1/1/2014 4:14:43 PM        Joseph_Garza\Joseph.Garza" & vbCrlf & _
                            "No one is logged on via resource shares."
      Dim match As Match = Regex.Match(input, pattern)
      If match.Success Then
         For ctr As Integer = 1 To match.Groups.Count - 1
            Dim captureCtr As Integer = 0
            For Each capture As Capture In match.Groups(ctr).Captures
               Console.WriteLine("Matches: {1}", _
                                 captureCtr, capture.Value)
               captureCtr += 1                  
            Next 
         Next 
      End If    
   End Sub 
End Module

ideone demo

注意:我只是添加了公司名称,以防万一,但如果您绝对不需要它,只需使用此regex

代码语言:javascript
复制
Users logged on locally:\s*((?:(?!\s{2,}).)*)\s*[^\\]*\\(\S+)

(去掉了[^\\]*周围的括号)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20987908

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档