RegEx从字符串中提取第一组数字

时间:2018-01-23 15:08:01

标签: regex vba excel-vba excel

我试图仅使用Vba中col A的regex函数提取第一组数字。

PRECEDEX 200 mcg 2 mL FTV应该只打印200.目前我的代码打印所有数字。

Private Sub splitUpRegexPattern()
    Dim Regex As New RegExp
    Dim strPattern As String
    Dim strInput As String
    Dim strReplace As String
    Dim Myrange As Range

    Set Myrange = ActiveSheet.Range("E3:E1500")

    For Each C In Myrange
        strPattern = "\D+"

        If strPattern <> "" Then
            strInput = C.Value
            strReplace = "$1"

            With Regex
                .Global = True
                .MultiLine = True
                .IgnoreCase = False
                .Pattern = strPattern

            End With

            If Regex.test(strInput) Then
                C.Offset(0, 1) = Regex.Replace(strInput, " ")
            Else
                C.Offset(0, 1) = "(Not matched)"
            End If
        End If
    Next
End Sub

1 个答案:

答案 0 :(得分:2)

您应该使用\d+模式,并使用.Execute而非.Replace方法实际提取数字(您还需要使用{{1只查找第一个匹配项。)

使用

RegExp.Global=False

此处,Sub splitUpRegexPattern() Dim Regex As New regexp Dim strPattern As String Dim strInput As String Dim Myrange As Range Dim mtch As Object Set Myrange = ActiveSheet.Range("E3:E1500") For Each c In Myrange strPattern = "\d+" If strPattern <> "" Then strInput = c.Value With Regex .Global = False .MultiLine = True .IgnoreCase = False .pattern = strPattern End With If Regex.test(strInput) Then Set mtch = Regex.Execute(strInput) If mtch.Count > 0 Then c.Offset(0, 1) = mtch.Item(0).Value End If Else c.Offset(0, 1) = "(Not matched)" End If End If Next End Sub 尝试查找匹配项,如果找到匹配项(Set mtch = Regex.Execute(strInput)),则会将值(If mtch.Count > 0)添加到右侧的下一列。