我已经在这里待了一个多小时没有成功,而且它正在努力.
我正在尝试制作一个匹配此字符串的正则表达式{Date HH:MM:ss},但这里的诀窍,HH,MM和ss是可选的,但它必须是"HH",而不仅仅是"H"(相同)事情适用于MM和ss).如果出现单个"H",则不应匹配该字符串.
我知道我可以使用H {2}来匹配HH,但我似乎无法使用该功能加上?匹配零次或一次(零,因为它是可选的,最多一次).
到目前为止我正在做这个(显然不起作用):
Regex dateRegex = new Regex(@"\{Date H{2}?:M{2}?:s{2}?\}");
Run Code Online (Sandbox Code Playgroud)
请帮助我,抱歉这个noob问题.
FB.
接下来的问题,既然我在第一个字符串上有匹配,我想只采用HH:MM:ss部分并将其放在另一个字符串中(这将是TimeStamp对象的格式).
我使用了相同的方法,如下所示:
Regex dateFormatRegex = new Regex(@"(HH)?:?(MM)?:?(ss)?");
Run Code Online (Sandbox Code Playgroud)
但是当我在"{Date HH:MM}"上尝试时,我没有匹配,为什么?
编辑:如果我添加这样的空间Regex dateFormatRegex = new Regex(@" (HH)?:?(MM)?:?(ss)?");我有结果,但我不想要空间......我认为第一个括号需要被转义,但(在这种情况下不会起作用,我猜因为它是不是作为要匹配的字符串的一部分的括号,而是一个关键字符.
Thi*_*ter 22
(H{2})?匹配零个或两个H字符.
但是,在你的情况下,写两次会更具可读性:
Regex dateRegex = new Regex(@"\{Date (HH)?:(MM)?:(ss)?\}");
Run Code Online (Sandbox Code Playgroud)
除此之外,请确保没有任何功能可用于您想要做的任何事情.解析日期非常普遍,大多数编程语言都在其标准库中具有功能 - 我几乎打赌我的声誉中.NET有1k也具有这样的功能.