regex - 查找字符串中的第一个数字,可能是 1,11,111

标签 regex excel vba

我正在循环使用这种模式的文件名 name_name-number-name_name.txt
我需要提取 number .

例如,

  • 来自 xxx_xx-111-ssadas22我会得到 111 .
  • 来自 xxx_xx-11-sadaesdwsq4443fsd2我会得到 11

  • 目前正在使用它,但是当名称中有数字时它就不足了。还尝试了正则表达式,但不擅长。
    Function FirstDigit(strData As String) As Integer
        Dim RE As Object
        Dim REMatches As Object
    
        Set RE = CreateObject("vbscript.regexp")
        With RE
             .Pattern = "(^|\\s)([0-100]+)($|\\s)"
        End With
    
        Set REMatches = RE.Execute(strData)
        FirstDigit = REMatches.item(0)
    End Function
    

    任何想法 ?

    最佳答案

    尝试这个:

    Function FirstDigit(strData As String) As Integer
        Dim RE As Object
        Dim REMatches As Object
    
        Set RE = CreateObject("vbscript.regexp")
        With RE
             .Pattern = "\b[^_\s]+_[^-\s]+-(\d+)-[^\.\s]+\.txt\b"
        End With
    
        Set REMatches = RE.Execute(strData)
        If REMatches.Count > 0 Then
            FirstDigit = REMatches(0).SubMatches(0)
        Else
            FirstDigit = -1     '' or whatever you want to output when there is no match
        End If
    End Function
    

    测试:
    Sub Test()
        Debug.Print FirstDigit("xxx_xx-1-ssadas22.txt")     '' Returns 1
        Debug.Print FirstDigit("xxx_xx-11-ssadas22.txt")    '' Returns 11
        Debug.Print FirstDigit("xxx_xx-111-ssadas22.txt")   '' Returns 111
        Debug.Print FirstDigit("xxx_xx-asasa-ssadas22.txt") '' Returns -1 (no match)
    End Sub
    

    关于regex - 查找字符串中的第一个数字,可能是 1,11,111,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20455457/

    相关文章:

    ruby - 帮助正则表达式捕获一行中的所有内容

    VBA 打开 Excel 文件 - 对话框更改

    excel - 在 Excel VBA 中保存单个工作表

    excel - 如果在列中找到重复的单元格值,则返回值

    java - 意外的记录类型(org.apache.poi.hssf.record.HyperlinkRecord)

    vba - ".MoveSize"或 ".Move"用于弹出表单定位

    excel - vbNewline 与 Chr(10) 作为 Windows 与 Mac OSX 中的换行分隔符

    MySQL 字符串仅包含某些 unicode 字符

    regex - Vim:匹配行尾的空格但不匹配由单个空格组成的行

    ruby - 积极的前瞻不会在第一次出现时停止