Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.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
.net 如何获取两个重复单词之间的字符串?_.net_Regex_Vb.net_String - Fatal编程技术网

.net 如何获取两个重复单词之间的字符串?

.net 如何获取两个重复单词之间的字符串?,.net,regex,vb.net,string,.net,Regex,Vb.net,String,我一直在努力从一个文本文件中获取两个单词之间的字符串,在这个文本文件中,这些单词被重复了好几次 我的档案里有什么 Name: Person1 Age: 20 Name: Person2 Age:21 Name: Person3 Age:22 我想要什么作为输出 Person1 Person2 Person3 我到目前为止所做的 Public Function StrBtw(ByVal Text_ As String, ByVal Start_ As String,

我一直在努力从一个文本文件中获取两个单词之间的字符串,在这个文本文件中,这些单词被重复了好几次

我的档案里有什么

 Name: Person1 
 Age: 20

 Name: Person2 
 Age:21

 Name: Person3 
 Age:22
我想要什么作为输出

Person1 
Person2 
Person3
我到目前为止所做的

Public Function StrBtw(ByVal Text_ As String, ByVal Start_ As String, ByVal End_ As String) As String
        Dim V As String = Nothing
        V = Text_.Substring(Text_.IndexOf(Start_) + Start_.Length, Text_.IndexOf(End_) - Text_.IndexOf(Start_) - Start_.Length)
        Return V
    End Function
用法

        Dim A As String = myFileString

        For i As Integer = 0 To A.Length - 1
            If i = A.IndexOf(W) Then
                TextBox1.Text &= StrBtw(A, "Name: ", "Age: ")
                i = A.IndexOf(W) + "Name: ".Length
            End If
        Next
电流输出

Person1
如上所述,输出仅显示Person1的名称,而我需要所有名称。我认为可能的原因可能是IndexOf函数每次都返回到第一个“Name:”。 我试着用正则表达式。我发现它非常混乱,结果仍然是一样的。
我花了两个小时在这上面,所以非常感谢您的帮助。

您是对的,问题是
IndexOf
只会以您使用它的方式检索第一次出现的内容。但是,存在一个将搜索的开始索引作为参数的。您可以使用此重载并按如下方式更改代码:

Public Class Test
    Public Shared Sub Main()
        Dim myFileString = "Name: Person1" & vbNewLine & "Age: 21" & _
            "Name: Person2" & vbNewLine & "Age: 21"
        Dim result As New System.Text.StringBuilder()
        Dim index = myFileString.IndexOf("Name:")
        While (index >= 0)
            Dim indexAge = myFileString.IndexOf("Age:", index)
            If (indexAge >= 0) Then
                result.AppendLine(myFileString.SubString(index + 5, indexAge - index - 5).Trim())
            End If
            index = myFileString.IndexOf("Name:", indexAge)
        End While
        Console.WriteLine(result)
    End Sub
End Class

样本获取第一个索引,没有附加参数;随后的展览以“年龄”为起点。您可以运行该示例。

如果要使用正则表达式,可以使用该代码:

Dim matches = Regex.Matches(myFileString, "(?<=Name:\s).*(?=\n)", RegexOptions.Multiline)

For Each Match In matches
    Dim found As String = Match.ToString().Trim()
Next

Dim matches=Regex.matches(myFileString,“(?工作得很好。非常感谢:]