VBA正则表达式:双引号后按需添加空格的功能修复
修复VBA正则函数实现双引号后按需添加空格
需求:在双引号"之后添加一个空格,但当双引号后紧跟空格、x/X或*时不执行添加操作。现有VBA正则函数仅能正确处理第一个测试用例,需调整适配所有场景。
现有代码
Function Add_Space(str As String) As String Static re As New RegExp re.Pattern = "("""")" re.Global = True re.IgnoreCase = True Add_Space = re.Replace(str, "$1 ") End Function
测试用例
| 当前结果 | 预期结果 |
|---|---|
| Repair of 8"sales | Repair of 8" sales |
| Repair of 8"x12"sales | Repair of 8"x12" sales |
| Repair of 8"*12" sales | Repair of 8"*12" sales |
| Repair of 8" sales | Repair of 8" sales |
修复方案
原正则会匹配所有双引号并强制添加空格,未处理例外场景。我们需要用负向预查来排除不需要添加空格的情况,修改后的正则表达式可精准匹配符合要求的双引号。
修复后的函数
Function Add_Space(str As String) As String Static re As New RegExp ' 匹配双引号,且后面不是空格、x/X、* re.Pattern = "("""")(?!\s|[x*])" re.Global = True re.IgnoreCase = True ' 忽略大小写,同时适配x和X Add_Space = re.Replace(str, "$1 ") End Function
正则逻辑说明
(""):捕获双引号作为分组1,用于替换时保留原双引号(?!\s|[x*]):负向预查规则,确保双引号后的字符不属于以下任意一种:\s:任意空白字符(包含空格)[x*]:x、X(因开启IgnoreCase)或*
通过该规则,函数只会给需要添加空格的双引号后补空格,自动跳过所有例外场景。
内容的提问来源于stack exchange,提问作者Peace
相关产品推荐
相关产品推荐

