如何在句尾匹配句子
本文关键字:句子 | 更新日期: 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
的结尾应该在哪里