gpt4 book ai didi

regex - Excel VBA RegEx,从范围内的价格值中提取数字(包含逗号、$ 和 -)

转载 作者:行者123 更新时间:2023-12-02 23:26:51 28 4
gpt4 key购买 nike

我从数据库中提取了一个表示一系列值的字段数据,但它以字符串格式在 Excel 中$86,000 - $162,000

我需要从每个单元格中提取最小值和最大值,因此我需要提取其中的数字部分,并忽略 $-,.

我已附上我拥有的数据的图像以及我想从中提取的值。

enter image description here

这是我使用 RegEx 得到的最接近的模式,但不是我正在寻找的。

模式 = (\d+)(?:\.(\d{1,2}))?

有人可以帮忙吗?

最佳答案

只是想知道为什么使用正则表达式?

Function GetParts(priceRange As String) As Double()
Dim arr() As String
Dim parts() As Double

If InStr(1, priceRange, "-") > 0 Then
arr = Split(priceRange, "-")
ReDim parts(0 To UBound(arr))

Dim i As Long
For i = 0 To UBound(arr)
parts(i) = CDbl(Replace$(Replace$(Trim$(arr(i)), "$", ""), ",", ""))
Next i
End If
GetParts = parts
End Function

Sub test()
MsgBox GetParts("$14,000 - $1,234,567")(0) 'Minimum
End Sub

编辑

但是您可以使用正则表达式来将数据字符串匹配到各个部分:

Function GetPartsRegEx(priceRange As String) As Variant
Dim arr() As Double

Dim pricePattern As String
pricePattern = "(\$?\d+[\,\.\d]*)"

'START EDIT
Static re As RegExp
If re Is Nothing Then
Set re = New RegExp
re.IgnoreCase = True
re.Global = True
re.Pattern = pricePattern & "\s*[\-]\s*" & pricePattern 'look for the pattern first
End If

Static nums As RegExp
If nums Is Nothing Then
Set nums = New RegExp
'to remove all non digits, except decimal point in case you have pennies
nums.Pattern = "[^0-9.]"
nums.Global = True
End If
'END EDIT

If re.test(priceRange) Then
ReDim arr(0 To 1) ' fill return array
arr(0) = CDbl(nums.Replace(re.Replace(priceRange, "$1"), ""))
arr(1) = CDbl(nums.Replace(re.Replace(priceRange, "$2"), ""))
Else
'do some error handling here
Exit Function
End If 'maybe throw error if no +ve test or

GetPartsRegEx = arr
End Function

Sub test()
MsgBox GetPartsRegEx("$1,005.45 - $1,234,567.88")(1)
End Sub

关于regex - Excel VBA RegEx,从范围内的价格值中提取数字(包含逗号、$ 和 -),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53966192/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com