.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
返回行和列,因此文本是否分散在多行上并不重要。修改它,使其可以从任意位置开始。