S>Вопрос: а можно внутри описанной именной группы phcor матчить как-то более типизировано, т.е. capture.name1 = 'C1C' capture.name2 = '-71.940'.
Более типизировано можно, например, если вместо регулярных выражений использовать парсер.
Сейчас есть библиотеки очень простых комбинаторных парсеров, например,
Sprache
Class Capture
Public ReadOnly Key As String
Public ReadOnly Value As Decimal
Public Sub New(Key As String, Value As Decimal)
Me.Key = Key
Me.Value = Value
End Sub
End Class
function Test() as integer
Dim CultureInfo = Globalization.CultureInfo.InvariantCulture
Dim DecimalParser =
From Minus In Parse.String("-").Text.Optional
From Digits In Parse.Digit.Repeat(1, 4).Text
From Point In Parse.String(".").Text
From FractionalDigits In Parse.Digit.Repeat(3).Text
Select Decimal.Parse(
If(Minus.IsDefined, Minus.Get, String.Empty) & Digits & Point & FractionalDigits, CultureInfo)
Dim CaptureParser =
From WhiteSpace In Parse.WhiteSpace
From Key In Parse.LetterOrDigit.Repeat(3).Text
From KeyValueSeparator In Parse.WhiteSpace.Repeat(1, 4)
From Value In DecimalParser
Select New Capture(Key, Value)
Dim StringParser =
From Capture In CaptureParser.Repeat(4)
Select Capture
Dim TestString = " C1C -71.940 C1P -71.940 C2C -71.940 C2P -71.940"
Dim Captures = StringParser.Parse(TestString)
end function
Парсер преобразует строку в структуру, в данном случае в перечисление объектов типа Capture со свойствами Key строкового типа и Value типа Decimal.