Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 如何改进打印范围的正则表达式?_Regex_Vba - Fatal编程技术网

Regex 如何改进打印范围的正则表达式?

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+(\

我想为打印范围改进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+*)
将捕获
,45
。现在由于外部的
*
而重复整个组,并且在最后一次迭代
中,
捕获50
,\d+
-53
-\d+
捕获

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

使用正向前瞻
(?=,|$)
断言直接在右边的是逗号或字符串结尾

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

如果您想要3组,您可以使用:

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

让我们“谈论代码”:为什么不拆分(cellTextStrng,“,”)?我想我很喜欢这里的第一个选项,因为它更容易修改,以确保没有输入我忘记的零!!