我必须解析一个字符串来创建一个PathSegmentCollection。该字符串由逗号和/或(任何)空格(如换行符、制表符等)分隔的数字组成,数字也可以使用科学记数法编写。
这是一个例子:"9.63074,9.63074 -5.55708e-006 0 ,0 1477.78"
点是:P1(9.63074, 9.63074), P2(-0,555708, 0), P3(0, 1477.78)
要提取数字,我使用正则表达式:
Dim RgxDouble As New Regex("[+-]?\b[0-9]+(\.[0-9]+)?(e[+-]?[0-9]+)?\b")
Dim Matches As MatchCollection = RgxDouble.Matches(.Value)
Dim PSegmentColl As New PathSegmentCollection
Dim PFigure As New PathFigure
With Matches
If .Count < 2 OrElse .Count Mod 2 <> 0 Then Exit Sub
PFigure.StartPoint = New Point(.Item(0).Value, .Item(1).Value)
For i As UInteger = 2 To .Count - 1 Step 2
Dim x As Double = .Item(i).Value, y As Double = .Item(i + 1).Value
PSegmentColl.Add(New LineSegment With {.Point = New Point(x, y)})
Next
End With
它有效,但我必须解析大约十万个(或更多)字符串,而且这种方式太慢了。我想找到一个更有效的解决方案,而:大多数时候数字不是用科学记数法写的,如果你认为这是更好的方法,我可以使用用 C++/CLI 编写的使用 C/C++ 的程序集非托管代码或 C# 不安全代码。