Regex 如何改进打印范围的正则表达式?
我想为打印范围改进VBA正则表达式 目前我有:Regex 如何改进打印范围的正则表达式?,regex,vba,Regex,Vba,我想为打印范围改进VBA正则表达式 目前我有: (\d+(-\d+)*)+(,\d+(-\d+)*)* 但是,对于条目12-25,45,50-53,这将返回、和-,如下所示: 匹配1:-25 匹配项2:,50-53 匹配3:-53 并且没有返回45 理想情况下,我希望为每个逗号分隔的条目返回一个组,不包含任何、或-,如下所示: 匹配项1:(12-25) 匹配项2:(45) 匹配3:(50-53)45不在组中的原因是您正在重复第二个捕获组。重复捕获组时,该组包含上一次迭代的值 所以(,\d+(\
(\d+(-\d+)*)+(,\d+(-\d+)*)*
但是,对于条目12-25,45,50-53
,这将返回、
和-
,如下所示:
匹配1:-25
匹配项2:
,50-53
匹配3:
-53
并且没有返回
45
理想情况下,我希望为每个逗号分隔的条目返回一个组,不包含任何、
或-
,如下所示:
匹配项1:(12-25)
匹配项2:
(45)
匹配3:
(50-53)
45不在组中的原因是您正在重复第二个捕获组。重复捕获组时,该组包含上一次迭代的值
所以(,\d+(\d+*)
将捕获,45
。现在由于外部的*
而重复整个组,并且在最后一次迭代中,捕获50
,\d+
和-53
被-\d+
捕获
您可以做的是匹配1+个数字,并为连字符和1+个数字部分使用一个可选组来获得3个匹配项
使用正向前瞻(?=,|$)
断言直接在右边的是逗号或字符串结尾
\d+(?:-\d+)?(?=,|$)
如果您想要3组,您可以使用:
(\d+(?:-\d+)?),(\d+(?:-\d+)?),(\d+(?:-\d+)?)
让我们“谈论代码”:为什么不拆分(cellTextStrng,“,”)?我想我很喜欢这里的第一个选项,因为它更容易修改,以确保没有输入我忘记的零!!