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 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

【讨论】:

我现在更喜欢正则表达式了。谢谢! 这个正则表达式可以有多个实例吗?例如同时查找 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 - 无法绑定到新的显示成员 - 组合框 - 数组

vb.net - 基于模式搜索文件

VB.NET 中的 Val() 函数是如何工作的?

如何在android中以编程方式查找TextView的文本区域(高度/宽度)

vb.net如何查询DataGridView中数据,然后把查询到的内容显示到listview中