using System;
using System.Text.RegularExpressions;
public class Example
{
public static void Main()
{
string pattern = @"^(?P<LogTime>[A-Za-z0-9 :]+)\s(?P<Hostname>[a-z0-9.-]+)\s(?:ae_(?P<EnvIdentity>[a-z-]+):)\s(?P<ModuleName>[a-zA-Z._]+)?\s-\s(?P<LogLevel>[A-Z]+)\s-\s(?:\[JID:(gen:)?(?P<TaskId>[a-z0-9-]+)\]\s?)?(?:\[FID:(?P<FieldId>[a-z0-9-]+)\]\s?)?(?:\[Itin:(?P<Itinerary>[A-Za-z0-9]+)(?:->(?P<Step>[A-Z0-9a-z]+))?\]\s?)?(?:\[State:(?P<State>[A-Za-z]+)\]\s?)?(?:alias=(?P<StepAlias>[a-z0-9]+),\s)?(?:runtime_s=\[?(?P<JobRuntimeSeconds>[0-9.]+)\]?\s?)?(?:metadata=(?P<Metadata>{.*}))?$";
string input = @"Oct 30 09:54:06 production-ae-workers-d8c35 ae_env-name: ae.core.manager - INFO - [JID:gen:156364bc-fb25-11e9-8d15-02420af40b07] [FID:dead-f4rm-dead] [Itin:RunFieldForecastHourlyUpdate] [State:Finished] runtime_s=[16.03] metadata={""initiating_event"": ""hourly"", ""hourly_timestamp"": ""2019/10/30/14/00"", ""timestamp"": ""2019/10/30/08/00"", ""pd_meta"": {""farm"": {""uuid"": ""dead-beef-dead"", ""name"": ""My Farm Name""}, ""field"": {""uuid"": ""dead-b00b-dead"", ""name"": ""My house""}, ""token"": ""REDACTED"", ""organization"": {""uuid"": ""dead-f00d-dead"", ""name"": ""My Organization""}, ""enterprise_group"": {""uuid"": ""dead-gr0up-dead"", ""name"": ""My Group""}}, ""field_uuid"": ""dead-f4rm-dead"", ""token"": ""REDACTED"", ""process_cfs"": false, ""seed_corn"": false, ""current_cropping"": null, ""daily_timestamp"": ""2019/10/30/08/00"", ""ye_target"": ""user"", ""priority"": 3}";
RegexOptions options = RegexOptions.Multiline;
foreach (Match m in Regex.Matches(input, pattern, options))
{
Console.WriteLine("'{0}' found at index {1}.", m.Value, m.Index);
}
}
}
Please keep in mind that these code samples are automatically generated and are not guaranteed to work. If you find any syntax errors, feel free to submit a bug report. For a full regex reference for C#, please visit: https://msdn.microsoft.com/en-us/library/system.text.regularexpressions.regex(v=vs.110).aspx