VB.net在字符串中查找字符,然后显示找到的文本,包括字符

时间:2015-08-04 18:30:31

标签: vb.net text

我可以找到没有问题的文字,我很难找到找到字符的正确方法,然后捕捉它后面的文字并包括找到的字符。因此,我需要一种方法来修改此代码,以便在找到文本后对其执行某些操作。我想查看提交给我的表单的任何文本,如果它找到特定的字符(在这种情况下是tkt)我想将它们与以下字符一起msgbox,直到空格,不是字母或数字的字符或结尾串。我使用<>显示我想要放置tkt号码的位置。

例如:

Dim strTEST As String = "I am a ticket. My ticket is tkt8937378"
    ' See if tkt is contained in the string.
    If Not strTEST.IndexOf("tkt") = -1 Then
        msgbox("No ticket found")
    Else
        msgbox("Ticket " & <tkt8937378> & " found.")
    End If

2 个答案:

答案 0 :(得分:3)

  

如果找到特定字符(在本例中为tkt),我想要msgbox   它们与以下字符一起直到一个空格,一个字符   这不是字母或数字或字符串的结尾。

听起来像是Regex.Match()的好候选人。

如果您只希望字符串中的一个票证:

    Dim strTEST As String = "I am a ticket. My ticket is tkt8937378"
    Dim m As Match = Regex.Match(strTEST, "\btkt[0-9a-fA-F]+\b")
    If m.Success Then
        Dim ticket As String = m.Value
        MessageBox.Show("Ticket " & ticket & " found.")
    End If

对于字符串中的多个票号,请使用带Match()的循环,或切换到Matches()方法。

您可以在Regular-Expressions.info了解有关正则表达式的更多信息。

----------编辑#1 ----------

  

您可以在此RegEx中拥有多个实例吗?例如找到   tkt和TKT?或者让它不区分大小写?

当然!您可以通过向其添加(?i)来使模式本身不区分大小写:

Dim m As Match = Regex.Match(strTEST, "\b(?i)tkt[0-9a-fA-F]+\b")

或者,您可以通过传递第三个参数并使用Match()来告诉RegexOptions.IgnoreCase不区分大小写:

Dim m As Match = Regex.Match(strTEST, "\btkt[0-9a-fA-F]+\b", RegexOptions.IgnoreCase)

----------编辑#2 ----------

  

我注意到当我尝试For Each门票时,我打破了它。意思是msgbox&#39; s   我发现每封信。所以如果我在一个字符串中有两个tkt&#39; s。 - 像:&#34;我是   一张票。我的票是tkt8937378和tkt89377786&#34;

以下是返回字符串中所有票号的简单示例:

    Dim strTEST As String = "I am a ticket. My ticket is tkt8937378. I am different ticket, called TKT411, in the same string." & vbCrLf _
        & "I'm a loner tKt911411311 on a different line!"
    Dim m As Match = Regex.Match(strTEST, "\btkt[0-9a-fA-F]+\b", RegexOptions.IgnoreCase)
    While m.Success
        Dim ticket As String = m.Value
        Console.WriteLine(ticket)
        m = m.NextMatch
    End While

与上述相同,但使用For EachRegex.Matches()代替Match()

    Dim strTEST As String = "I am a ticket. My ticket is tkt8937378. I am different ticket, called TKT411, in the same string." & vbCrLf _
        & "I'm a loner tKt911411311 on a different line!"
    For Each m As Match In Regex.Matches(strTEST, "\btkt[0-9a-fA-F]+\b", RegexOptions.IgnoreCase)
        Dim ticket As String = m.Value
        Console.WriteLine(ticket)
    Next

答案 1 :(得分:1)

有例子:

        Dim strTEST As String = "I am a ticket. My ticket is tkt8937378"

        If strTEST.IndexOf("tkt") = -1 Then
            MsgBox("No ticket found")
        Else
            Dim res = Mid(strTEST, strTEST.IndexOf("tkt") + 1, Len(strTEST) - strTEST.IndexOf("tkt")).ToString.Split(" ")
            MsgBox("Ticket " & res(0) & " found.")
        End If

或您可以使用Dim res = strTEST.Substring(strTEST.IndexOf("tkt"), Len(strTEST) - strTEST.IndexOf("tkt")).ToString.Split(" ")