ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 12575|回复: 11

[分享] 使用正则表达式寻找字母和数字并进行替换

[复制链接]

TA的精华主题

TA的得分主题

发表于 2018-7-3 16:47 | 显示全部楼层 |阅读模式
Public Function strReplace(ByVal sText As String) As String
Dim reg
Dim zmMatches As String
Dim szMatches As String
Dim spansCount As Integer

spansCount = ActiveWorkbook.Worksheets("概况表").Cells(1, 2).Value

Set reg = CreateObject("vbscript.regexp")

'sText = Worksheets("汇总表").Range("a1").Value

With reg
    '设置是否匹配所有的符合项,True表示匹配所有, False表示仅匹配第一个符合项
    .Global = True

    '设置是否区分大小写,True表示不区分大小写, False表示区分大小写
    .IgnoreCase = True

    .Pattern = "^[A-Za-z]+"
    '判断是否可以找到匹配的字符,若可以则返回True
    'MsgBox .test(sText)

    If .test(sText) Then
        '对字符串执行正则查找,返回所有的查找值的集合,若未找到,则为空
        Set objMatches = .Execute(sText)
        zmMatches = LCase(objMatches(0).Value) '编号从0开始
    End If

    '把字符串中用正则找到的所有匹配字符替换为其它字符
    'MsgBox .Replace(sText, "")
End With

With reg
    '设置是否匹配所有的符合项,True表示匹配所有, False表示仅匹配第一个符合项
    .Global = True

    '设置是否区分大小写,True表示不区分大小写, False表示区分大小写
    .IgnoreCase = True

    .Pattern = "[0-9]+$"
    '判断是否可以找到匹配的字符,若可以则返回True
    'MsgBox .test(sText)

    If .test(sText) Then
        '对字符串执行正则查找,返回所有的查找值的集合,若未找到,则为空
        Set objMatches = .Execute(sText)
        szMatches = objMatches(0).Value '编号从0开始
    End If

    '把字符串中用正则找到的所有匹配字符替换为其它字符
    'MsgBox .Replace(sText, "")
End With

Select Case zmMatches
    Case "k"
        strReplace = "第" & CStr(szMatches) & "跨"
    Case "dt"
        If szMatches = 0 Then
            strReplace = CStr(szMatches) & "#桥台"
        ElseIf szMatches = spansCount Then
            strReplace = CStr(szMatches) & "#桥台"
        Else
            strReplace = CStr(szMatches) & "#桥墩"
        End If
    Case "z"
        strReplace = CStr(szMatches) & "#支座"
    Case "b"
        strReplace = CStr(szMatches) & "#主梁"
    Case Else
        strReplace = sText
End Select

'MsgBox strReplace

End Function


TA的精华主题

TA的得分主题

发表于 2018-7-3 18:03 | 显示全部楼层
谢谢分享:关键在写出正确高效的“表达式”,而正则对象的属性和方法显得不是那么重要!

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-11-28 10:40 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
这个是帮助,用的时候翻翻,很方便

VB脚本从入门到精通(帮助手册).zip

513.7 KB, 下载次数: 164

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-2-22 14:14 | 显示全部楼层
这个是寻找字符串中数字的小函数,strText为包含数字的字符串
Function regFind(strText)
Set reg = CreateObject("vbscript.regexp")

With reg
    '设置是否匹配所有的符合项,True表示匹配所有, False表示仅匹配第一个符合项
    .Global = True

    '设置是否区分大小写,True表示不区分大小写, False表示区分大小写
    .IgnoreCase = True

    .Pattern = "[0-9]+$"
    '判断是否可以找到匹配的字符,若可以则返回True
    'MsgBox .test(sText)

    If .test(strText) Then
        '对字符串执行正则查找,返回所有的查找值的集合,若未找到,则为空
        Set objMatches = .Execute(strText)
        regFind = objMatches(0).Value '编号从0开始
    End If

End With
End Function

TA的精华主题

TA的得分主题

发表于 2019-2-23 11:34 | 显示全部楼层
楼主,我的WPS版没有用呀!

TA的精华主题

TA的得分主题

发表于 2019-2-27 13:25 | 显示全部楼层
dogingate 发表于 2018-11-28 10:40
这个是帮助,用的时候翻翻,很方便

mark 谢谢分享

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-3-7 11:27 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
jinhaitiao16 发表于 2019-2-23 11:34
楼主,我的WPS版没有用呀!

这个是office的vba吧,wps版怎么能用呢

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-7-5 21:15 | 显示全部楼层
这是网上找来的,可以测试vba语句的,enjoy

正则提取器V0.3.zip

12.93 KB, 下载次数: 99

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-7-5 21:16 | 显示全部楼层
本帖最后由 dogingate 于 2019-7-5 21:18 编辑

最近整理了两个正则的子函数regTest用于测试正则表达式是否有效,regMatch则返回经过正则表达式提取的字符串
传入三个参数,strRegText,strPattern,oreg分别为欲进行正则提取的文本,正则表达式,正则表达式对象

Function regTest(ByVal strRegText As String, ByVal strPattern As String, ByVal oreg As Object) As Boolean
Dim strMatch As String

With oreg
    '设置是否匹配所有的符合项,True表示匹配所有, False表示仅匹配第一个符合项
    .Global = True
    '设置是否区分大小写,True表示不区分大小写, False表示区分大小写
    .IgnoreCase = True
   
    .Pattern = strPattern
   
    If .test(strRegText) Then
        regTest = True
    Else
        regTest = False
    End If

End With

End Function

Function regMatch(ByVal strRegText As String, ByVal strPattern As String, ByVal oreg As Object)
'''属性 pattern global ignorecase multiline
'''方法 test replace execute
Dim strMatch As String

With oreg
    '设置是否匹配所有的符合项,True表示匹配所有, False表示仅匹配第一个符合项
    .Global = True
    '设置是否区分大小写,True表示不区分大小写, False表示区分大小写
    .IgnoreCase = True
    '设置要查找的字符模式
    .Pattern = strPattern

    '判断是否可以找到匹配的字符,若可以则返回True
    'MsgBox .test(sText)

    '对字符串执行正则查找,返回所有的查找值的集合,若未找到,则为空
    Set objmatches = .Execute(strRegText)

    If objmatches.Count = 1 Then
       strMatch = objmatches(0)
    Else
        MsgBox "error"
    End If

    '把字符串中用正则找到的所有匹配字符替换为其它字符
    'MsgBox .Replace(sText, "")
End With

regMatch = strMatch

End Function

TA的精华主题

TA的得分主题

发表于 2019-7-5 21:44 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
学习了,留名,常回来看看
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-18 06:36 , Processed in 0.039073 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表