创建或修改目录:/www/wwwroot/104.219.215.234/data 失败!
松岛枫快播 Excel·VBA自界说正则抒发式函数、使用 - 情趣做爱
你的位置:情趣做爱 > 冲田杏梨番号 > 松岛枫快播 Excel·VBA自界说正则抒发式函数、使用
冲田杏梨番号
松岛枫快播 Excel·VBA自界说正则抒发式函数、使用
发布日期:2024-09-07 04:00    点击次数:135
目次 正则抒发式替换函数欺诈1,索求1个字母+10个数字欺诈2,中英文分割欺诈3,索求11位手机号欺诈4,指定笔墨替换欺诈5,索求终末一个括号的本色欺诈6,索求总共括号的本色欺诈7,索求地址中的省、市、县、乡欺诈8,仅保留数字和璀璨欺诈9,索求单价(整数、浮点数) 正则抒发式赢得函数欺诈1,索求品名、型号欺诈2,索求数字、运算符欺诈3,索求数字规格欺诈4,自动讨论积分欺诈5,规格索求

正则抒发式在线测试-菜鸟用具松岛枫快播

正则抒发式替换函数
Function RE(ByVal source_str$, pat$, Optional replace_str$ = "$1")
    '通用正则替换函数,函数界说RE(字符串,正则时势,替换值)对字符串复返正则替换后的字符串
    '可在表格中使用,仅适用单个单位格
    With CreateObject("vbscript.regexp")  '正则抒发式
        .Global = True
        .Pattern = pat
        RE = .Replace(source_str, replace_str)
    End With
End Function
欺诈1,索求1个字母+10个数字

《excel吧发问-索求共同特征的数据》

正则:.*([a-zA-Z]\d{10}).*

图片松岛枫快播松岛枫快播

欺诈2,中英文分割

《excel吧发问-中英文分离》

正则:索求中语[a-zA-Z]*或[^一-龥]*或([a-zA-Z]+)
正则:索求英文[^a-zA-Z]*或[一-龥]*或.*?([a-zA-Z]+).*

图片

欺诈3,索求11位手机号

《excel吧发问-索求11位手机号》

正则:.*(\d{11}).*

图片

欺诈4,指定笔墨替换

《excel吧发问-将一列本色引入到另一列本色中间》

正则:([a-zA-Z]\d+)

图片

欺诈5,索求终末一个括号的本色

《excel吧发问-单位格字数不等,括号个数不等,怎么截取终末一个括号的本色》

色尼 姑
正则:.*(?=\()

图片

欺诈6,索求总共括号的本色
正则:.*?(\(.*?\))

图片

欺诈7,索求地址中的省、市、县、乡

《wps吧发问-如何将省市县乡分列披露》

正则:(.*?(省|市|自治区))?(.*?(市|区|自治州|盟|地区))?(.*?(县|市|区|旗))?(.*?(乡|镇|街说念))?(.*)

提防:直辖市地址应如下图所示写法

图片

参考而已: 《百度百科-地级行政区》 《百度百科-县级行政区》

欺诈8,仅保留数字和璀璨

《excel吧发问-如何去除单位格中的笔墨、字母,只保留数字和标点璀璨》

正则:[^\d-,]

提防:文中为中语逗号

图片

欺诈9,索求单价(整数、浮点数)

《excel吧发问-如何索求内部的单价》

正则:.*?(\d+(\.\d+)?)元.*

图片

正则抒发式赢得函数

2023.7.30更新,加多补助复返遵守既能输出数组,又能输出数组的第n个值

Function RE_execute(ByVal source_str$, pat$, Optional n& = 0)
    '通用正则赢得函数,函数界说RE_execute(字符串,正则时势,复返值)对单位格复返正则赢得后的字符串数组
    '复返值n为0时复返数组遵守,为其他整数时复返第n个值,正数法令负数倒序(-1为终末一个)
    Dim result, i&, num&
    With CreateObject("vbscript.regexp")  '正则抒发式
        .Global = True
        .Pattern = pat
        Set mhs = .Execute(source_str)
        num = mhs.Count
        If num = 0 Then RE_execute = "": Exit Function
        ReDim result(1 To num)
        For i = 0 To num - 1
            result(i + 1) = mhs(i).Value
        Next
        If n = 0 Then
            RE_execute = result
        ElseIf n > 0 And n <= num Then
            RE_execute = result(n)
        ElseIf n < 0 And Abs(n) <= num Then
            RE_execute = result(n + num + 1)
        Else
            RE_execute = ""
        End If
    End With
End Function
欺诈1,索求品名、型号

《excel吧发问-索求品名、型号》

Sub 品名型号()
    Dim s$, rng, r  '一定要界说类型,不然报错“ByRef参数类型不符”
    Set rng = Intersect(ActiveSheet.UsedRange, Selection)  'intersect语句幸免遴选整列形成无须讨论
    If rng.Columns.count > 1 Then Debug.Print "仅补助单列": Exit Sub  '仅补助单列,多列则退出
    For Each r In rng
        s = r.Value
        result = RE_execute(s, "[A-Za-z0-9/-]+")
        If IsArray(result) Then r.Offset(0, 2).Resize(1, UBound(result)) = result
    Next
End Sub

图片

欺诈2,索求数字、运算符

《excel吧发问-索求数字、运算符》 该正则匹配绝顶暴力,适用整数、少量的 A*B*C=D 形势

Sub 数字运算符()
    Dim s$, rng, r  '一定要界说类型,不然报错“ByRef参数类型不符”
    Set rng = Intersect(ActiveSheet.UsedRange, Selection)  'intersect语句幸免遴选整列形成无须讨论
    If rng.Columns.count > 1 Then Debug.Print "仅补助单列": Exit Sub  '仅补助单列,多列则退出
    For Each r In rng
        s = r.Value
        result = RE_execute(s, "\d+(\.\d+)?\*\d+(\.\d+)?\*\d+(\.\d+)?\=\d+(\.\d+)?")
        If IsArray(result) Then r.Offset(0, 2).Resize(1, UBound(result)) = result
    Next
End Sub

图片

欺诈3,索求数字规格

《excel吧发问-索求数字规格》

Sub 索求数字()
    Dim rng As Range, r, s$
    Set rng = [a2:a11]
    For Each r In rng
        s = r.Value
        result = RE_execute(s, "\d+(\.\d+)?(\-\d+)?")
        If IsArray(result) Then r.Offset(0, 1).Resize(1, UBound(result)) = result
    Next
End Sub

图片

欺诈4,自动讨论积分

《excel吧发问-汇总积分》,索求+大约-之后的数字,对数字乞降

Sub 自动讨论积分()
    Dim rng As Range, r, arr, a
    Set rng = [a2:a5]
    For Each r In rng
        arr = RE_execute(r.Value, "[+-]\d+")
        a = Join(arr, "")
        r.Offset(0, 1) = Application.Evaluate(a)
    Next
End Sub

图片

欺诈5,规格索求 驳斥区发问,对2种规格分歧索求,同期使用了RE函数和RE_execute函数
Sub 规格索求()
    Dim col, rng, r, s, result '一定要界说类型,不然报错“ByRef参数类型不符”
    col = 1    '需要处置的列号,字母"a"=数字1
    With ActiveSheet
        Set rng = Intersect(.UsedRange, .Cells(1, col).EntireColumn)  'intersect语句幸免遴选整列形成无须讨论
        For Each r In rng
            If Len(r) Then
                result = RE_execute(r.Value, "\d+(\.\d+)?~\d+(\.\d+)?")
                r.Offset(1, 2).Resize(2, 1) = WorksheetFunction.Transpose(result)
                s = RE(r.Value, ".*?\*(\d+(\.\d+)?\*\d+(\.\d+)?)")
                r.Offset(1, 3).Resize(2, 1) = WorksheetFunction.Transpose(Split(s, "*"))
            End If
        Next
    End With
End Sub

图片

也可仅使用RE_execute函数索求规格,以下代码调用了《Excel·VBA单位格区域行列数退换函数》wraparr函数(如需使用代码需复制)
Sub 规格索求2()
    Dim col, rng, r, result   '一定要界说类型,不然报错“ByRef参数类型不符”
    col = 1    '需要处置的列号,字母"a"=数字1
    With ActiveSheet
        Set rng = Intersect(.UsedRange, .Cells(1, col).EntireColumn)  'intersect语句幸免遴选整列形成无须讨论
        For Each r In rng
            If Len(r) Then
                result = RE_execute(r.Value, "\d+(\.\d+)?(~\d+(\.\d+)?)?")
                result = wraparr(WorksheetFunction.Transpose(result), "col", 2)
                r.Offset(1, 2).Resize(2, 2) = result
            End If
        Next
    End With
End Sub

图片

本站仅提供存储做事,总共本色均由用户发布,如发现存害或侵权本色,请点击举报。

Powered by 情趣做爱 @2013-2022 RSS地图 HTML地图

Copyright Powered by站群系统 © 2013-2024

创建或修改目录:/www/wwwroot/104.219.215.234/data 失败!
JzEngine Create File False