如何匹配具有此类新行的内容
"start does not work
end"
这个很好用
“开始这个工作结束”
这就是我调用代码的方式
Debug.Print(ParseData(RichTextBox1.Text, "start", "end"))
这是我正在使用的功能
我称之为20MB到100MB的html文件,文本文件等。所以.Replace(Enviroment.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
答案 0 :(得分:1)
您不能在解析器中匹配文本,但在扫描程序中。
你可以通过多种方式解决这个问题,但我不确定你真正想要做什么(我的意思是 - 是否还有这个例子)。
你首先拆分文字,所以也许不要将它拆分,并且由于它匹配任何东西都会更容易
编写更多通用函数 - IndexOf,它从给定位置(列+行)开始在线搜索,这样你就可以找到&#34; end&#34;在下一行
即时起草:
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);
}
假设您从头开始搜索,这是有用的(我猜)。