我需要一些整理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)
答案 0 :(得分:1)
45不在组中的原因是您正在重复第二个捕获组。重复捕获组时,该组将包含上一次迭代的值。
因此(,\d+(-\d+)*)
将捕获,45
。现在由于外部*
重复了整个组,并且在最后一次迭代中,,50
被,\d+
捕获,-53
被-\d+
您可能要做的是匹配1个以上的数字,并为连字符和1个以上的数字使用一个可选的组来获得3个匹配项。
使用正向前瞻(?=,|$)
来断定右边右边是逗号或字符串的结尾。
\d+(?:-\d+)?(?=,|$)
如果要3组,可以使用:
(\d+(?:-\d+)?),(\d+(?:-\d+)?),(\d+(?:-\d+)?)