我的正在进行的项目有一个相当棘手的问题。我几乎需要从更大的字符串中提取出多个分隔符之间的特定字符串。为了让您更好地理解我的意思,下面是一个示例:
Some Text that wont be needed
Some Text that wont be needed
Some Text that wont be needed
Some Text that wont be needed
Some Text that wont be needed
Textstart (Start-Delimiter)
Text I want
Text I want
Text I want
Text I want
Text I want
Textend (End-Delimiter)
到目前为止,非常容易。但是现在其中有些混乱了。结束符有时会像这样改变
Textstart
Text I want
Text I want
Text I want
Text I want
Textend2 (another end delimiter)
我也解决了该问题,但是现在我发现,开始定界符也可以在下一个结束部分之前出现两次。像这样:
Textstart (Start-Delimiter)
Text I want
Text I want
Textstart
Text I want
Text I want
Textend (End-Delimiter)
这确实让我感到困惑。这是现在的功能。它起作用,但是仅当开始定界符没有出现两次时才起作用。
我可以先用结尾字符串分割文本,然后再用起始字符串分割文本,但是我不知道用多个定界符分割文本是很热门的。
Function NewTextGet(ByVal Text As String, ByVal StartString As String, ByVal EndStrings() As String)
Dim AllBlocks As New List(Of String)
Dim FirstSplit() As String = Strings.Split(Text, StartString) ' Splits Text at Start delimiter
For Each splt In FirstSplit.Skip(1)
Dim EndSplit1 = splt.Split({EndStrings(0)}, StringSplitOptions.None) ' First end delimiter Split
Dim EndSplit2 = EndSplit1(0).Split({EndStrings(1)}, StringSplitOptions.None) ' Second delimiter Split
Dim EndSplit3 = EndSplit2(0).Split({EndStrings(2)}, StringSplitOptions.None) ' Third delimiter Split
If EndSplit3.Length > 1 Then
AllBlocks.Add(EndSplit3(0))
ElseIf EndSplit2.Length > 1 Then
AllBlocks.Add(EndSplit2(0))
Else
AllBlocks.Add(EndSplit1(0))
End If
Next
Return AllBlocks
End Function`
I hope I explained this well enough, and thank you for any help :)
稍作更新,请重试:
Function NewTextGet(ByVal Text As String, ByVal StartString As String, ByVal EndStrings() As String)
Dim started As Boolean = False
Dim AllBlocks As New List(Of String)
Dim lines() As String = Text.Split(Environment.NewLine.ToCharArray, StringSplitOptions.RemoveEmptyEntries)
For Each line As String In lines
If line.Contains(StartString) Then
started = True
Dim i As Integer = line.IndexOf(StartString)
AllBlocks.Add(line.Substring(i + StartString.Length))
ElseIf EndStrings.Contains(line.trim()) Then
started = False
ElseIf started = True Then
AllBlocks.Add(line)
End If
Next
Return AllBlocks
End Function