Regex 需要一个以逗号分隔的大端日期列表的正则表达式模式

Regex 需要一个以逗号分隔的大端日期列表的正则表达式模式,regex,vba,excel,Regex,Vba,Excel,示例: 2011-01-01 2011-01-012011-01-282011-12-31 等等 我不需要它来验证日期本身是否有效,只要列表的格式正确即可 我正在使用: ^[0-9]+(,[0-9]+)*$ 要匹配逗号分隔的数字列表,请执行以下操作: ^[0-9]{4}-[0-9]{2}-[0-9]{2}$ 以我想要的格式匹配单个日期,但: ^[0-9]{4}-[0-9]{2}-[0-9]{2}+(,[0-9]{4}-[0-9]{2}-[0-9]{2}+)*$ 似乎不起作用,我也不知道为什么 为

示例:

2011-01-01

2011-01-012011-01-282011-12-31

等等

我不需要它来验证日期本身是否有效,只要列表的格式正确即可

我正在使用:

^[0-9]+(,[0-9]+)*$

要匹配逗号分隔的数字列表,请执行以下操作:

^[0-9]{4}-[0-9]{2}-[0-9]{2}$

以我想要的格式匹配单个日期,但:

^[0-9]{4}-[0-9]{2}-[0-9]{2}+(,[0-9]{4}-[0-9]{2}-[0-9]{2}+)*$

似乎不起作用,我也不知道为什么

为了防止问题实际上与我的Excel VBA函数有关,我也将把它放在这里:

Public Function ValidDateList(ByVal value As String) As Boolean
    Dim oRegEx As Object
    Set oRegEx = CreateObject("VBScript.RegExp")
    With oRegEx
        .Pattern = "^[0-9]{4}-[0-9]{2}-[0-9]{2}+(,[0-9]{4}-[0-9]{2}-[0-9]{2}+)*$"
        ValidDateList = .test(value)
    End With
    Set oRegEx = Nothing
End Function

我要做的第一件事是去掉那些
+
字符

它们是你的多位数模式(第一个)的遗留物,充其量是多余的

最糟糕的情况是,他们可能需要一个文本
+
,因为您以前的模式已经有了一个转发器(您必须测试这个理论,我不太了解Excel的重新引擎)

尝试:


相反。

我要做的第一件事是去掉那些
+
字符

它们是你的多位数模式(第一个)的遗留物,充其量是多余的

最糟糕的情况是,他们可能需要一个文本
+
,因为您以前的模式已经有了一个转发器(您必须测试这个理论,我不太了解Excel的重新引擎)

尝试:


相反。

我把你的正则表达式和字符串放进去了,效果很好。您可以将字符串简化为^\d{4}-\d{2}-\d{2}+(,\d{4}-\d{2}-\d{2}+*$)。所以也许问题出在函数上,但是我帮不上忙,soz。我放了你的正则表达式和字符串,它工作得很好。您可以将字符串简化为^\d{4}-\d{2}-\d{2}+(,\d{4}-\d{2}-\d{2}+*$)。因此,可能是函数的问题,无法帮助解决这个问题,因此,以您的版本为灵感:
^(?[0-9]{4}-[0-9]{2}-[0-9]{2},)+$
假设列表始终至少有一项,并且后面的逗号是OK的是的,我不确定Excel中的重新引擎有多好,在这些情况下,我倾向于选择最小的公分母。谢谢,正如你所说,正是这些公分母造成了问题。它现在可以正常工作了,我已经修改了它,允许输入一位数或两位数的月/日条目。直到这个问题出现之前,我都不知道Excel中有一个正则表达式引擎!:-D以您的版本为灵感:
^(?[0-9]{4}-[0-9]{2}-[0-9]{2},)+$
假设列表始终至少有一个项目,并且尾随的逗号是可以的,是的,我不确定Excel中的重新引擎有多好,因此,在这种情况下,我倾向于选择最小的公分母。多亏了这些优点才是问题所在,正如你所说。它现在可以正常工作了,我已经修改了它,允许输入一位数或两位数的月/日条目。直到这个问题出现之前,我都不知道Excel中有一个正则表达式引擎!:-D
^[0-9]{4}-[0-9]{2}-[0-9]{2}(,[0-9]{4}-[0-9]{2}-[0-9]{2})*$