Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 使用regex快速解析数据_.net_Regex_Vb.net - Fatal编程技术网

.net 使用regex快速解析数据

.net 使用regex快速解析数据,.net,regex,vb.net,.net,Regex,Vb.net,我有一个12 MB的文件,我将其数据复制到RichTextBox1中进行处理。。 完成大约需要4秒钟,但有人告诉我使用(RegexOptions.Compiled)来加快速度,但我看不出两者之间有什么区别 Debug.Print(ParseData2(RichTextBox1.Text, "start", "end")) 这是函数,但我在做测试的地方做了注释 Function ParseData2(strData As String, ByVal sStart As String, ByVal

我有一个12 MB的文件,我将其数据复制到RichTextBox1中进行处理。。 完成大约需要4秒钟,但有人告诉我使用(RegexOptions.Compiled)来加快速度,但我看不出两者之间有什么区别

Debug.Print(ParseData2(RichTextBox1.Text, "start", "end"))
这是函数,但我在做测试的地方做了注释

Function ParseData2(strData As String, ByVal sStart As String, ByVal sStop As String)
    'Dim r As New Regex(sStart & "(.*?)(" & sStop & "|$)", RegexOptions.Multiline Or RegexOptions.IgnoreCase Or RegexOptions.Compiled)
    Dim r As New Regex(sStart & "(.*?)(" & sStop & "|$)", RegexOptions.Multiline Or RegexOptions.IgnoreCase)
    Dim matches = r.Matches(strData)
    Dim i As Integer = 1
    For Each m As Match In matches
        'Debug.Print("    match #" & i & ": " & m.Groups(1).Value)
        i += 1
    Next
    Return matches.Count
End Function

我不知道RegException的情况。但我可以问一下,您是否只需要计算一下发生的次数?如果是这样,也许你应该试试这个

match.Captures["Digits"].Length

请参阅此处的详细信息

'RegEx'和'Fast'不能一起使用,简单的字符串拆分/子字符串比使用常规ESPression更快

从MSDN:

Regex.Compiled:

指定将正则表达式编译为程序集。这 产生更快的执行,但增加启动时间。该值应为 调用 编译程序集方法

当您指定RegexOptions.Compiled选项时,框架将 使用自定义方法创建动态程序集,该方法将处理 正则表达式(正则表达式的预编译版本)

问题是将正则表达式编译为动态 程序集需要很长时间,因此第一次创建Regex对象时 使用Compiled选项创建,需要很长时间。 对Match()或Replace()的后续调用将执行一点 比未编译的正则表达式更快

只有在创建Regex对象时,预编译Regex才有用 在应用程序的早期,并经常重复使用它

我不是一个专家,但我认为你不能做比你已经做的更多的事情来尝试使用正则表达式来提高速度,也许使用流来编写调试信息可以“更快”地显示它(但可能相差一秒或更少)

但是,也许要稍微改进代码,不要让编译器假设您可以尝试分配函数返回值的数据类型:

 Private Function ParseData2(...) As Integer
以及匹配变量的类型:

 Dim matches As MatchCollection = r.Matches(strData)
在VB中,所有的事物都是从0开始计数,而不是从1开始计算,你可能想考虑使用这个:

 Dim i As Integer = 0