ExcelTip.Net留存知识帖 ---【注:附件之前被网盘供应商清空后,现已修复-现已修复-现已修复为本地下载!】
现在位置:首页 > E问E答 > Excel VBA > 如何用正则替换有规律的字符串时同时去除掉相连的符号?

如何用正则替换有规律的字符串时同时去除掉相连的符号?

作者:绿色风 分类: 时间:2022-08-17 浏览:103
楼主
kevinchengcw
Q: 如何用正则替换有规律的字符串时同时去除掉相连的符号?
A: 对于一串有规律的字符,例如本例所示范的字符串"第一章,第二章,第八章",我们用正则匹配规则"第[^一二]章"可以匹配到“非每一二章”的文字内容,但是替换掉时会留下前面的逗号,字符串处理结果不够理想,我们可以通过修改匹配规则,将前或后面的符号一同添加到匹配规则中去,这时我们就需要用到“|”这个字符,相当于VBA中的or的用法,为了比较明显显示出前后两段,我们还要用小括号将内容括起来,最终我们写出的匹配条件是:"(\,第[^一二]章)|(第[^一二]章\,)"。
解释如下:
匹配的字符串出现在源字符串中只有三种可能:开头、中间或结尾,当为开头时逗号会在后面,结尾时会在前面,中间时前后都会有,正则的匹配规则中从前到后只做一次匹配,即只要匹配到了一个情况,比如在中间时的“,第八章”,则不会再用这个第八章匹配“第八章,”,所以我们只需要设置一个这样的条件即可达到目的;
当中的“|”字符告诉程序这是两个并行条件的或运算,前后两个小括号中是两个不同的匹配条件,第一个条件匹配逗号在前面的情况,后面的匹配逗号在后面的情况,为防止标点符号等特殊字符直接使用在规则中不被认可的情况,我们在前面为了"\"来强制申明。
验证程序如下:
  1. Sub TestRegEx()
  2.     Dim RegEx As Object
  3.     Dim a As String
  4.     Dim b As String
  5.     Set RegEx = CreateObject("VBSCRIPT.REGEXP")
  6.     a ="第一章,第二章,第八章"
  7.     With RegEx
  8.         .Global = True
  9.         .Pattern = "第[^一二]章"
  10.         b = .Replace(a, "")
  11.         MsgBox b
  12.         .Pattern = (\,第[^一二]章)|(第[^一二]章\,)
  13.         b = .Replace(a, "")
  14.         MsgBox b
  15.     End With
  16.     Set RegEx = Nothing
  17. End Sub
2楼
xyh9999
发现K哥一处笔误,应为.Pattern = "(\,第[^一二]章)|(第[^一二]章\,)"


3楼
liuguansky

他经常 笔误,我习惯了。
4楼
xyh9999
哈哈,试着改改:
Sub TestRegEx()
    Dim RegEx As Object
    Dim a As String
    Dim b As String
    Set RegEx = CreateObject("VBSCRIPT.REGEXP")
    a = "第一章,第二章,第八章"
    With RegEx
        .Global = True
        .Pattern = "第[^一二]章"
        b = .Replace(a, "")
        MsgBox b
        .Pattern = ",?第[^一二]章,?" '哈哈,改成这样也挺好的。
        b = .Replace(a, "")
        MsgBox b
    End With
    Set RegEx = Nothing
End Sub
根据贪婪匹配原则,如果第N章在中间,你的PATTERN将匹配",第N章,"所以可以在最后面再加一个?,把贪婪变懒惰。
5楼
liuguansky
不行。。如果第N章在开头也不行。哈哈。你的方法不好,最好还是用K哥的PATTERN吧。
6楼
xyh9999
花花版主怎么在我4楼的帖子上加了以下这么一段话呀?这个好象不太合适吧?!file:///c:/1.jpg
“根据贪婪匹配原则,如果第N章在中间,你的PATTERN将匹配",第N章,"所以可以在最后面再加一个?,把贪婪变懒惰。”---花花版主加的!
7楼
liuguansky
我点回复的,不知道如何加到编辑中了。
8楼
kevinchengcw
如果是现在,我一定用submatches
pattern=",*(第.+?章),*"
那个是全角的逗号

免责声明

有感于原ExcelTip.Net留存知识的价值及部分知识具有的时间限定性因素, 经与ExcelTip.Net站长Apolloh商议并征得其同意, 现将原属ExcelTip.Net的知识帖采集资料于本站点进行展示, 供有需要的人士查询使用,也慰缅曾经的论坛时代。 所示各个帖子的原作者如对版权有异议, 可与本人沟通提出,或于本站点留言,我们会尽快处理。 在此,感谢ExcelTip.Net站长Apolloh的支持,感谢本站点所有人**绿色风(QQ:79664738)**的支持与奉献,特此鸣谢!
------本人网名**KevinChengCW(QQ:1210618015)**原ExcelTip.Net总版主之一

评论列表
sitemap