C# 如何使用正则表达式在一段时间内使秒和毫秒值成为可选值

C# 如何使用正则表达式在一段时间内使秒和毫秒值成为可选值,c#,regex,C#,Regex,我正在阅读文本文件。大多数文件的开头都有天-月-年-小时:分钟一些文本在这里…如下所示 28-09-2012 12:46 Some text here..... 我已经为此编写了一个正则表达式 (?<date>(?<day>\d{1,2})-(?<month>\d{1,2})-(?<year>(?:\d{4}|\d{2}))\s(?<time>(?<hour>\d{2}):(?<minutes>

我正在阅读文本文件。大多数文件的开头都有天-月-年-小时:分钟一些文本在这里…如下所示

    28-09-2012 12:46 Some text here.....
我已经为此编写了一个正则表达式

    (?<date>(?<day>\d{1,2})-(?<month>\d{1,2})-(?<year>(?:\d{4}|\d{2}))\s(?<time>(?<hour>\d{2}):(?<minutes>\d{2})))\s(?<textFileEntry>.*)
我已经写了这个正则表达式,但它不正确

    (?<date>(?<day>\d{1,2})-(?<month>\d{1,2})-(?<year>(?:\d{4}|\d{2}))\s(?<time>(?<hour>\d{2}):(?<minutes>\d{2})(?<seconds>\.?\d{2})(?<milli>\.?\d{0,3})))\s(?<textFileEntry>.*)
(?(?(?\d{1,2})-(?\d{1,2})-(?(?:\d{4}\d{124;\ d{2}))\s(?(?\d{2})(?\.?\d{2})(?\.?\d{2})(?\.?\.?\d{0,3}))\s(?)
我认为允许可选使用吗?有人能看到我在正则表达式中缺少了什么吗?多谢各位

您正在转义点(如下图所示)),因此如果要匹配文字点,只需将点更改为冒号,如下所示:

(?<date>(?<day>\d{1,2})-(?<month>\d{1,2})-(?<year>(?:\d{4}|\d{2}))\s(?<time>(?<hour>\d{2}):(?<minutes>\d{2})(?<seconds>:\d{2})?(?<milli>:\d{0,3})?))\s(?<logEntry>.*)
顺便说一句,如果您真的想使用
作为通配符,那么任何字符都可以用作第二个/mill分隔符

您可以清楚地看到下面的图案:

您正在转义点(如下图所示)。)因此,如果要匹配文字点,只需将点更改为冒号,如下所示:

(?<date>(?<day>\d{1,2})-(?<month>\d{1,2})-(?<year>(?:\d{4}|\d{2}))\s(?<time>(?<hour>\d{2}):(?<minutes>\d{2})(?<seconds>:\d{2})?(?<milli>:\d{0,3})?))\s(?<logEntry>.*)
顺便说一句,如果您真的想使用
作为通配符,那么任何字符都可以用作第二个/mill分隔符

您可以清楚地看到下面的图案:


除非您转义它(您这样做了),否则
只匹配一个字符,在这种情况下,它只匹配字符


此外,如果您想使整个组成为可选的,请使用
(:(?\d{0,3}))?
,这样,在您希望使其成为可选的整个对位之后,一个星号将显示。

除非您转义它(您这样做了),否则
只匹配一个字符


此外,如果您想使整个组成为可选的,请使用
(:(?\d{0,3}))?
,这样在您希望使其成为可选的整个并列关系之后会有一个星号。

Fede几乎是正确的,但是他的正则表达式在几秒钟和几毫秒内捕获冒号:char-使用这个

(?(?(?\d{1,2})-(?\d{1,2})-(?(?:\d{4}\d{2}))\s(??\d{2}):(?\d{2}))(::::(?\d{2})?\:(?\d{2})?:(?\d{2})s(?.*)

Fede的说法几乎正确,但他的正则表达式在几秒钟和几毫秒内捕捉到冒号:char-使用这个

(?(?(?\d{1,2})-(?\d{1,2})-(?(?:\d{4}\d{2}))\s(??\d{2}):(?\d{2}))(::::(?\d{2})?\:(?\d{2})?:(?\d{2})s(?.*)

是的,就是这样!谢谢。@ NePSYN14如果我的答案解决了你的问题,你可以考虑把你的问题标记为:好的。我该怎么做?@NepSyn14在选票数量下方的每个答案中,您将看到一张支票。只要按一下你认为答案回答你的问题的答案,是的,就是这样!谢谢。@ NePSYN14如果我的答案解决了你的问题,你可以考虑把你的问题标记为:好的。我该怎么做?@NepSyn14在选票数量下方的每个答案中,您将看到一张支票。只需点击检查,你就可以回答你的问题了。
(?<seconds>:\d{2})?(?<milli>:\d{0,3})?
                  ^-- here and here -^
(?<date>(?<day>\d{1,2})-(?<month>\d{1,2})-(?<year>(?:\d{4}|\d{2}))\s(?<time>(?<hour>\d{2}):(?<minutes>\d{2}))(:\:?(?<seconds>\d{2})?)?\:?(?<mili>\d+)?)\s(?<logEntry>.*)