.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,“(?工作得很好。非常感谢:]