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

时间:2014-03-09 06:05:37

标签: .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, 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:”。 我尝试使用RegEx。我发现它很混乱,结果仍然相同。 我已花了两个小时,所以任何帮助都表示赞赏。

2 个答案:

答案 0 :(得分:1)

你说得对,问题是IndexOf只会以你使用它的方式检索第一次出现。但是,有一个overload将搜索的起始索引作为参数。您可以使用此重载并更改代码,如下所示:

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

示例获取第一个没有附加参数的索引;随后的出现使用“年龄:”索引作为起点。您可以运行示例here

答案 1 :(得分:0)

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

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

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