Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.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
C# 正则表达式匹配零或一次字符串_C#_Regex - Fatal编程技术网

C# 正则表达式匹配零或一次字符串

C# 正则表达式匹配零或一次字符串,c#,regex,C#,Regex,我试图创建一个与这个字符串{Date HH:MM:ss}匹配的正则表达式,但这里有一个技巧:HH、MM和ss是可选的,但它必须是“HH”,而不仅仅是“H”(同样的事情也适用于MM和ss)。如果出现单个“H”,则字符串不应匹配 我知道我可以使用H{2}来匹配HH,但我似乎无法使用该功能加上?来匹配零或一次(零,因为它是可选的,并且最多一次) 到目前为止,我正在这样做(这显然不起作用): 下一个问题。现在我已经在第一个字符串上找到了匹配项,我只想获取HH:MM:ss部分,并将其放入另一个字符串中(

我试图创建一个与这个字符串{Date HH:MM:ss}匹配的正则表达式,但这里有一个技巧:HH、MM和ss是可选的,但它必须是“HH”,而不仅仅是“H”(同样的事情也适用于MM和ss)。如果出现单个“H”,则字符串不应匹配

我知道我可以使用H{2}来匹配HH,但我似乎无法使用该功能加上
来匹配零或一次(零,因为它是可选的,并且最多一次)

到目前为止,我正在这样做(这显然不起作用):


下一个问题。现在我已经在第一个字符串上找到了匹配项,我只想获取HH:MM:ss部分,并将其放入另一个字符串中(这将是TimeStamp对象的格式)

我使用了同样的方法,如下所示:

Regex dateFormatRegex = new Regex(@"(HH)?:?(MM)?:?(ss)?");
但是当我在{Date HH:MM}上尝试时,我没有得到任何匹配。为什么?

如果我添加这样的空格
Regex-dateFormatRegex=newregex(@“(HH)?:?(MM)?:?(ss)?”,我有结果,但我不想要空间。。。
我认为第一个括号需要转义,但是
\(
在这种情况下不起作用。我猜是因为它不是要匹配的字符串的一部分,而是一个关键字符。

(H{2})
匹配零个或两个
H
字符

但是,在您的情况下,写两次会更具可读性:

Regex dateRegex = new Regex(@"\{Date (HH)?:(MM)?:(ss)?\}");

除此之外,请确保没有函数可用于您尝试执行的任何操作。解析日期非常常见,大多数编程语言的标准库中都有函数-我几乎敢打赌.NET也有这样的函数。

在您的编辑中,您在结果中提到了一个不需要的前导空格…以将前导或尾随条件与正则表达式一起选中,而不将其包含在结果中。您可以使用正则表达式的lookaround功能

new Regex(@"(?<=Date )(HH)?:?(MM)?:?(ss)?")

newregex(@)(?我正在制作一种定制的小型”语言"出于文件重命名的目的,此处的Date不是指DateTime对象,而是指包含在自定义对象中的日期。这在主字符串上非常有效,请参阅我的更新问题,以了解紧接着发生的一个非常类似的问题。无论如何,可能值得使用.NET库。我不确定我是否理解该查找p的目的请你进一步解释一下好吗?
new Regex(@"(?<=Date )(HH)?:?(MM)?:?(ss)?")