VBA之正则表达式(18)-- 多项数据拆分

实例需求:数据保存在A列和B列中,B列的题目选项录入时采用了单行格式,打印测试题目之前需要调整为每个题目选项单独一行的格式。

使用VBA字符串函数去逐个字符判别的方式,对于B4的内容处理起来就比较麻烦,当然肯定是可以实现的。使用正则来实现就会更简洁。

Sub RegExpDemo85()
    Dim strTxt As String
    Dim objRegEx As Object
    Dim c As Range
    Set objRegEx = CreateObject("vbscript.regexp")
    objRegEx.Pattern = "(?=[A-D]\.)(?!^)"
    objRegEx.Global = True
    Set DataRng = Range([B2], Cells(Rows.Count, 2).End(xlUp))
    For Each c In DataRng
        strTxt = c.Value
        c.Value = objRegEx.Replace(strTxt, vbLf)
    Next
    Set objMH = Nothing
    Set objMatch = Nothing
    Set objRegEx = Nothing
End Sub

【代码解析】
第6行代码指定正则模式。

正则表达式 说明
(?=[A-D].) 是一个零宽正向先行断言,定位的位置之后为A至D单个字母加小数点
(?!^) 是一个零宽负向先行断言,定位的位置之后不是字符表达式的开始位置

第11行代码使用正则替换,由于正则模式指定的是“位置”,所以实际实现的效果是插入换行符。

执行代码轻松实现格式整理,如果正则表达式缺少(?!^),那么第一个选项A.之前会增加一个额外的换行。

发布了107 篇原创文章 · 获赞 49 · 访问量 14万+

猜你喜欢

转载自blog.csdn.net/taller_2000/article/details/100570112