如何在句尾匹配句子

本文关键字:句子 | 更新日期: 2023-09-27 18:01:30

const string input = "===== Action: [Action1]  State: [State1] by:[user1] at [timestamp1] =====    [Notes1]===== Action: [Action2]  State: [State2] by:[user2] at [timestamp2] =====    [Notes2]";
Regex expression = new Regex(@"===== Action: (?<Action>.*?)State:(?<State>.*?)by:(?<userid>.*?)at(?<timestamp>.*?)=====(?<Note>.*?)");
var results = expression.Matches(input);
foreach (Match match in results)
{
    Console.WriteLine("UserId:" + match.Groups["userid"].Value);
    Console.WriteLine("Action:" + match.Groups["Action"].Value);
    Console.WriteLine("State:" + match.Groups["State"].Value);
    Console.WriteLine("TimeStamp:" + match.Groups["timestamp"].Value);
    Console.WriteLine("Note:" + match.Groups["Note"].Value);
}

我能够正确解析除Note以外的所有值。知道我做错了什么吗?

如何在句尾匹配句子

您忘记在regex的末尾使用(?======|$)了。(?<Note>.*?)在你的正则表达式将匹配一切,直到结束,这不是你想要的…

那么正则表达式就是

===== Action: (?<Action>.*?)State:(?<State>.*?)by:(?<userid>.*?)at(?<timestamp>.*?)=====(?<Note>.*?)(?======|$)

如果输入用换行符分隔,则使用SinglelineMode选项

我的心灵调试感告诉我,你的正则表达式末尾的.*?不是贪婪的,并且只会拾取0个空格(这满足.*?)。

我想你可能想在你的输入和正则表达式中工作一些符号,以确定Note的结尾应该在哪里