.net 在解析器中也匹配新行

.net 在解析器中也匹配新行,.net,vb.net,.net,Vb.net,我怎样才能匹配像这样有新线的东西 "start does not work end" 这个很好用 “开始此工作结束” 这就是我如何调用代码的 Debug.Print(ParseData(RichTextBox1.Text, "start", "end")) 这就是我正在使用的函数 我打电话是为了20MB到100MB的html文件、文本文件等。。so.Replace(environment.Newline,“”) 行不通 Function ParseData(strData As String

我怎样才能匹配像这样有新线的东西

"start does not work
end"
这个很好用

“开始此工作结束”

这就是我如何调用代码的

Debug.Print(ParseData(RichTextBox1.Text, "start", "end"))
这就是我正在使用的函数

我打电话是为了20MB到100MB的html文件、文本文件等。。so.Replace(environment.Newline,“”) 行不通

Function ParseData(strData As String, sStart As String, sStop As String)
    Dim data As String
    Dim i, j, iCount As Integer
    Dim lines As New List(Of String)
    lines.AddRange(strData.Split(Environment.NewLine.ToCharArray, StringSplitOptions.RemoveEmptyEntries))
    For iCount = 0 To lines.Count - 1
        i = lines(iCount).IndexOf(sStart)
        While i <> -1
            j = lines(iCount).IndexOf(sStop, i + sStart.Length)
            If j <> -1 Then
                If j > i + sStart.Length Then
                    data = lines(iCount).Substring(i + sStart.Length, j - (i + sStart.Length)).Trim
                    Debug.Print(data)
                    i = lines(iCount).IndexOf(sStart, j + sStop.Length)
                Else
                    i = -1 'data not long enough
                End If
            Else
                i = -1 'no "stop"
            End If
        End While
    Next
    Return iCount
End Function
函数解析数据(strData作为字符串,sStart作为字符串,sStop作为字符串)
将数据设置为字符串
尺寸i、j、i计为整数
将行变暗为新列表(字符串)
lines.AddRange(strData.Split(Environment.NewLine.ToCharArray,StringSplitOptions.removemptyEntries))
对于iCount=0到行。计数-1
i=行(iCount).IndexOf(sStart)
而i-1
j=行(iCount).IndexOf(sStop,i+ssstart.Length)
如果j-1那么
如果j>i+s开始长度,则
数据=行(iCount).Substring(i+ssstart.Length,j-(i+ssstart.Length)).Trim
调试.打印(数据)
i=行(iCount).IndexOf(sStart,j+sStop.Length)
其他的
i=-1'数据不够长
如果结束
其他的
i=-1'无“停止”
如果结束
结束时
下一个
返回i计数
端函数
您不匹配解析器中的文本,但匹配扫描仪中的文本

您可以用几种方法解决这个问题,但我不确定您真正想要做什么(我的意思是——是否有比这个例子更多的方法)

  • 您首先拆分文本,因此可能不拆分它,多亏了它,匹配任何内容都会更容易

  • 编写更通用的函数--IndexOf,它从给定的位置(列+行)开始在行中搜索,这样您就可以在下一行中找到“end”


动态草稿:

public static Tuple<int,int> IndexOf(
  this IEnumerable<string> lines,
  string needle)
{
  foreach (Tuple<string,int> line in lines.ZipWithIndex())
  {
    int idx = line.Item1.IndexOf(needle);
    if (idx!=-1)
      return Tuple.Create(line.Item2,idx);
  }

  return Tuple.Create(-1,-1);
}
公共静态元组索引(
这是无数条线,
线针)
{
foreach(line.ZipWithIndex()中的元组行)
{
int idx=行项目1.索引(针);
如果(idx!=-1)
返回Tuple.Create(line.Item2,idx);
}
返回Tuple.Create(-1,-1);
}

假设您从一开始就进行搜索,我想这是可行的。

您能给我看一些示例代码来完全理解您的需求吗mean@XK8ER我用第二种方法的小草稿更新了答案。此
IndexOf
返回行和列,因此文本是否分散在多行上并不重要。修改它,使其可以从任意位置开始。