从 Python 或 Excel 中的字符串中提取多个数值

Extract multiple numeric values from string in Python or Excel

我有一个这样的字符串:

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。

此函数将 return 字符串中日期后的数值数组。

  • 它假定前面的数据始终采用 nn/nn/nnnn- 的格式,如您在单个示例中所示。
  • 它还假设 nn/nn/nnnn- 永远不会有另一个不是日期的实例。
  • 日期后的值放在捕获组中。
  • 它将 return 与字符串中存在的这些值一样多。

您可以输入跨 n 列的数组,或使用 INDEX 函数分别 return 每个值:

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