我可以找到没有问题的文字,我很难找到找到字符的正确方法,然后捕捉它后面的文字并包括找到的字符。因此,我需要一种方法来修改此代码,以便在找到文本后对其执行某些操作。我想查看提交给我的表单的任何文本,如果它找到特定的字符(在这种情况下是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
答案 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 Each
与Regex.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(" ")