Re: Подскажите по регулярному выражению.
От: Strategy  
Дата: 11.07.16 09:10
Оценка: 5 (1)
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.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.