如何整理打印范围的正则表达式

时间:2019-06-27 20:58:28

标签: 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)

1 个答案:

答案 0 :(得分:1)

45不在组中的原因是您正在重复第二个捕获组。重复捕获组时,该组将包含上一次迭代的值。

因此(,\d+(-\d+)*)将捕获,45。现在由于外部*重复了整个组,并且在最后一次迭代中,,50,\d+捕获,-53-\d+

您可能要做的是匹配1个以上的数字,并为连字符和1个以上的数字使用一个可选的组来获得3个匹配项。

使用正向前瞻(?=,|$)来断定右边右边是逗号或字符串的结尾。

\d+(?:-\d+)?(?=,|$)

Regex demo

如果要3组,可以使用:

(\d+(?:-\d+)?),(\d+(?:-\d+)?),(\d+(?:-\d+)?)

Regex demo