gpt4 book ai didi

c# - 年份无法使用正则表达式正确显示

转载 作者:太空宇宙 更新时间:2023-11-03 21:21:52 25 4
gpt4 key购买 nike

使用正则表达式匹配这行文本我发现年份仍然显示为 2015-01-07 而不仅仅是 2015。谁能看出我的正则表达式有什么问题?

代码行:

    2015-01-07 Wed Jan 07 11:03:43.390 DD Started

我的正则表达式:

    (?<date>(?<year>(?:\d{4}|\d{2})-(?<month>\d{1,2})-(?<day>\d{1,2})))\s(?<logEntry1>.*)\s(?<logEntry2>.*)\s(?<logEntry3>.*)\s(?<time>(?<hour>\d{2}):(?<minutes>\d{2}):(?<seconds>\d{2}).(?<milli>\d{0,3}))\s(?<logEntry>.*)

为什么我不能挑出“年份”?我通过 regex101.com 运行它,这里是捕获组值:

    MATCH 1
date [0-10] `2015-01-07`
year [0-10] `2015-01-07`
month [5-7] `01`
day [8-10] `07`
logEntry1 [11-14] `Wed`
logEntry2 [15-18] `Jan`
logEntry3 [19-21] `07`
time [22-34] `11:03:43.390`
hour [22-24] `11`
minutes [25-27] `03`
seconds [28-30] `43`
milli [31-34] `390`
logEntry [35-45] `DD Started`

最佳答案

您应该将括号从 ))) 移至 (?:\d{4}|\d{2})):

(?<date>(?<year>(?:\d{4}|\d{2}))-(?<month>\d{1,2})-(?<day>\d{1,2}))\s(?<logEntry1>.*)\s(?<logEntry2>.*)\s(?<logEntry3>.*)\s(?<time>(?<hour>\d{2}):(?<minutes>\d{2}):(?<seconds>\d{2}).(?<milli>\d{0,3}))\s(?<logEntry>.*)

实际上,我宁愿对这么长的正则表达式使用 VERBOSE 正则表达式选项,并使用像 # Year 这样的注释来跟踪你的内容:

var rx = new Regex(@"(?<date>
(?<year>
(?:\d{4}|\d{2})
) # Year
-
(?<month>\d{1,2})
-
(?<day>\d{1,2})
) # Date
\s
(?<logEntry1>.*)
\s
(?<logEntry2>.*)
\s
(?<logEntry3>.*)
\s
(?<time>
(?<hour>\d{2})
:
(?<minutes>\d{2})
:
(?<seconds>\d{2})
.
(?<milli>\d{0,3})
)
\s
(?<logEntry>.*)", RegexOptions.IgnorePatternWhitespace);

结果:

enter image description here

关于c# - 年份无法使用正则表达式正确显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30186167/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com