Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 如何进行循环以查找匹配的字符串_Vb.net - Fatal编程技术网

Vb.net 如何进行循环以查找匹配的字符串

Vb.net 如何进行循环以查找匹配的字符串,vb.net,Vb.net,嗨,我想提取与此代码匹配的所有字符串: Dim textafter As String = """,""webPageType" Dim textbefore As String = """url"":""/watch?v=" Dim startPosition As Integer = RichTextBox

嗨,我想提取与此代码匹配的所有字符串:

        Dim textafter As String = """,""webPageType"
        Dim textbefore As String = """url"":""/watch?v="
        Dim startPosition As Integer = RichTextBox1.Text.IndexOf(textbefore)
        startPosition += textbefore.Length
        Dim endPosition As Integer = RichTextBox1.Text.IndexOf(textafter, startPosition)
        Dim textFound As String = RichTextBox1.Text.Substring(startPosition, endPosition - startPosition)
        RichTextBox1.Text = (textFound)

此代码将返回匹配的第一个url。如何使用for each来检索与我的条件匹配的所有链接?

一种方法是使用正则表达式来查找与从开始文本加上任何内容再加上结束文本生成的模式的匹配项

例如,下面的代码组成了一些测试数据,并使用正则表达式来获取所需的数据。它只需要两个RichTextBox控件,名为rtbSource和rtbFound

Option Strict On

Imports System.Text.RegularExpressions

Public Class Form1

    Function FindDelimitedStrings(sourceText As String, textBefore As String, textAfter As String) As List(Of String)
        Dim found As New List(Of String)
        Dim re = New Regex(Regex.Escape(textBefore) & "(.*?)" & Regex.Escape(textAfter), RegexOptions.Singleline)
        Dim ms = re.Matches(sourceText)
        For Each m As Match In ms
            found.Add(m.Groups(1).Value)
        Next

        Return found

    End Function

    Sub AddTestData(textBefore As String, textAfter As String)
        Dim sb As New StringBuilder()

        For Each w In {"A", "B", "C"}
            sb.AppendLine(textBefore & w & textAfter)
            sb.AppendLine("---")
        Next
        rtbSource.Text = sb.ToString()

    End Sub

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        Dim textBefore As String = """url"":""/watch?v="
        Dim textAfter As String = """,""webPageType"

        AddTestData(textBefore, textAfter)

        For Each s In FindDelimitedStrings(rtbSource.Text, textBefore, textAfter)
            rtbFound.AppendText(s & vbCrLf)
        Next

    End Sub

End Class
正则表达式中的
*?
匹配零次和无限次之间的任何字符,匹配次数尽可能少,并根据需要展开(来自的解释)。括号告诉它将其放入一个组中。
Regex.Escape
用于确保对正则表达式中具有特殊含义的任何字符进行转义,从而使其失去特殊含义

上面的代码在rtbSource中显示了这一点:

“url”:“/watch?v=A”,“webgetype”
---
“url”:“/watch?v=B”,“WebPagetType”
---
“url”:“/watch?v=C”,“WebPagetType”
---
并将其放入rtbFound:

A
B
C

您好,谢谢,但我只想显示url,在本例中为A、b、c等,不带“url”:“/watch?v=和“webgetype”。这可能吗?对于A、b、c中的每个w,您的意思是什么?这里有很多匹配的链接,而不仅仅是三个。。我错了吗?@34234234这只是测试数据来演示,因为我无法访问您正在使用的实际数据。与我的条件匹配的链接数没有定义。。它可以是10或500。。这就是为什么我怀疑这个系统,比如“对于每个符合我标准的url,然后在rtb1中显示它们的列表。”。。