gpt4 book ai didi

c# - 正则表达式将字符串中的日期与 where 子句匹配

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

我需要从下面的示例文本中获取日期字符串,即 2019-01-22 15:36:141,023,仅当该行包含 Correct 而不是 Test12 单词。所以理想情况下,我应该在下面的字符串中得到两个匹配项(第 3 行和第 5 行)。

第 1 行:2019-01-22 15:36:141,043:[测试][123] 信息 - 测试:正确的 Test12 ping

第 2 行:2019-01-22 15:36:141,029:[测试][124323] 信息 - 测试:错误的 Test12 ping

第 3 行:2019-01-22 15:36:141,023:[测试][12554363] 信息 - 测试:正确测试 ping

第 4 行:2019-01-22 15:36:141,123:[测试][6761213] 信息 - 测试:错误的 Test12 ping

第 5 行:2019-01-22 15:36:141,093:[测试][46543123] 信息 - 测试:无效测试 ping

第 6 行:2019-01-22 15:36:141,890:[测试][887] 信息 - 测试:正确测试 ping

我可以通过 (?\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2 获取日期字符串}(?:,\d{3}\b)?) 但不确定如何包含其他条件。有线索吗?

最佳答案

无需为正则表达式增加额外的复杂性,您可以遍历文件中的行并执行 Test12 的检查和 Correct使用常规字符串方法:

var results = new List<string>();
using (var sr = new StreamReader(filepath, true))
{
var line = "";
while ((line=sr.ReadLine()) != null)
{
if (line.Contains("Correct") && !line.Contains("Test12"))
{
var res = Regex.Match(line, @"\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2,}(?:,\d{3}\b)?");
if (res.Success)
{
results.Add(res.Value);
}
}
}
}

使用正则表达式,如果您要检查的单词是否出现在日期之后,请使用

\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2,}(?:,\d{3}\b)?(?!.*Test12)(?=.*Correct)
^^^^^^^^^^^^^^^^^^^^^^^^^

参见 regex demo .

在这里,(?!.*Test12)(?=.*Correct)是前瞻确保 1) 没有 Test12和 2) 有一个子字符串 Correct在当前位置右侧(即日期之后)尽可能多的除换行符之外的任何 0+ 个字符之后。

如果这些词可能出现在字符串的任何地方,你可以使用

(?m)\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2,}(?:,\d{3}\b)?(?=.*\r?$(?<!Test12.*)(?<=Correct.*))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

参见 this regex demo .

在这里,(?m)选项设置 RegexOptions.Multiline true 这样 $可以被解析为行 anchor 的结尾,(?=.*\r?$(?<!Test12.*)(?<=Correct.*)) positive lookahead 执行以下检查:它要求到行尾有 0+ 个字符,然后,在行尾,使用 lookbehinds 执行两个检查:negative lookbehind (?<!Test12.*)确保没有 Test12一条线上的任何地方和积极的后视(?<=Correct.*)确保有 Correct一行上的任意位置子串。

\r? $ 之前的可选 CR是必需的,因为在多行模式下有一个相当恼人的事实 $\r 之前不匹配.

关于c# - 正则表达式将字符串中的日期与 where 子句匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55451207/

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