Извлечение нескольких числовых значений из строки в Python или Excel - PullRequest
0 голосов
/ 03 июня 2019

У меня есть строка, которая выглядит следующим образом:

Adjustment-05/15/2019-2,000-Random text-Adjustment-05/16/2019-203.57

Мне просто нужно извлечь 2000 и поместить его в один столбец и 203.57 в другой столбец.Потенциально может быть более двух из этих значений.

Ценить любую помощь вообще!

Я пытался удалить в Excel даты и текст, который работал, но тогда у меня все еще есть 2 значения, которые я надеваюне знаю, как отделить.Я попробовал следующие две функции, которые работают хорошо, но я все еще не могу извлечь второе или третье числовые значения.

Public Function ExtractNumber(inValue As String) As Double
    With New RegExp
        .Pattern = "(\d{1,3},?)+(\.\d{2})?"
        .Global = True
        If .Test(inValue) Then
            ExtractNumber = CDbl(.Execute(inValue)(0))
        End If
    End With
End Function

Function RemoveDates(MyRange As Range) As String
    Dim sRaw As String
    Dim sPattern As String
    Dim regEx As New RegExp

    sRaw = MyRange.Value

    sPattern = "[0-9]{1,2}[-.\\/][0-9]{1,2}[-.\\/][0-9]{4}"

    With regEx
        .Global = True
        .MultiLine = True
        .IgnoreCase = False
        .Pattern = sPattern
    End With

    If regEx.Test(sRaw) Then
        RemoveDates = regEx.Replace(sRaw, "")
    Else
        RemoveDates = "Not matched"
    End If
    Set regEx = Nothing
End Function

Результат, который я ищу, равен 2000 в одном столбце и 203,57 в другом.

1 Ответ

1 голос
/ 03 июня 2019

Эта функция будет возвращать массив числовых значений, следующих за датой в вашей строке.

  • Предполагается, что предыдущие данные всегда имеют формат nn/nn/nnnn-, как показано в вашем сингле.пример.
  • Также предполагается, что никогда не будет другого экземпляра nn/nn/nnnn-, который не является датой.
  • Значение, следующее за датой, помещается в группу захвата.
  • Он вернет столько значений, сколько существует в строке.

Вы можете либо ввести массив в виде столбцов n, либо использовать функцию INDEX, чтобы возвращать каждое значение отдельно:

Option Explicit
Function ExtractNums(S As String) As Double()
    Dim RE As Object, MC As Object, M As Object
    Dim D() As Double, I As Long
Set RE = CreateObject("vbscript.regexp")
With RE
    .Pattern = "\d{2}/\d{2}/\d{4}-([\d,.]+)"
    .Global = True
    If .test(S) = True Then
        Set MC = .Execute(S)
        ReDim D(1 To MC.Count)
        I = 0

        For Each M In MC
            I = I + 1
            D(I) = M.submatches(0)
        Next M
    End If
End With
ExtractNums = D

End Function

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...