在多个定界符之间分割文本

问题描述 投票:0回答:1

我的正在进行的项目有一个相当棘手的问题。我几乎需要从更大的字符串中提取出多个分隔符之间的特定字符串。为了让您更好地理解我的意思,下面是一个示例:

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 :)

vb.net
1个回答
0
投票

稍作更新,请重试:

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
© www.soinside.com 2019 - 2024. All rights reserved.