实例需求:数据保存在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.
之前会增加一个额外的换行。