VB.net 在字符串中查找字符,然后显示找到的文本,包括字符
Posted
技术标签:
【中文标题】VB.net 在字符串中查找字符,然后显示找到的文本,包括字符【英文标题】:VB.net Find characters in a string then show the text found including the characters 【发布时间】:2015-08-04 18:30:31 【问题描述】:我可以找到文本没有问题,我一直在试图找出一种正确的方法来查找字符,然后捕获它后面的文本并包括找到的字符。因此,我需要一种方法来修改此代码,以便在找到文本后对其进行处理。我想查看提交给我的表单的任何文本,如果它找到特定字符(在本例中为 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
【问题讨论】:
IndexOf 返回一个位置编号,将其用作下一个起点来搜索行尾标记的空间,然后使用 SubString 从根句子中提取该字符串元素。IndexOf
返回一个整数,但除了第一个字符之外,还有要开始的重载。所以在tkt
(或最大长度)之后找到第一个空格的索引,两者之间的字符将是你想要的SubString()
。
【参考方案1】:
如果它找到特定的字符(在这种情况下是 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")
或者,您可以通过传递第三个参数并使用RegexOptions.IgnoreCase
来告诉Match()
不区分大小写:
Dim m As Match = Regex.Match(strTEST, "\btkt[0-9a-fA-F]+\b", RegexOptions.IgnoreCase)
--------- 编辑#2 ----------
我注意到,当我尝试 For Each 票时,我把它弄坏了。意思是msgbox的 我找到的每封信。所以如果我在一个字符串中有两个 tkt。 - 比如:“我是 一张票。我的票是 tkt8937378 和 tkt89377786"
这是一个返回字符串中所有票号的简单示例:
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
【讨论】:
我现在更喜欢正则表达式了。谢谢! 这个正则表达式可以有多个实例吗?例如同时查找 tkt 和 TKT?还是让它不区分大小写? 查看上面的编辑,了解如何使其不区分大小写。 一如既往的感谢 Idle_Mind 这是 Microsoft 特定的 Regular Expression Language 文档。【参考方案2】:有例子:
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(" ")
【讨论】:
以上是关于VB.net 在字符串中查找字符,然后显示找到的文本,包括字符的主要内容,如果未能解决你的问题,请参考以下文章
vb .net里的 查找替换功能里 ,我想把List 替换替换成fList List是单独的字符串。
VB.NET 2005 - 无法绑定到新的显示成员 - 组合框 - 数组