Я пытаюсь создать большое выражение регулярного выражения, где планируется захват 6 групп. Будет использоваться для анализа некоторого Android журнала, который имеет следующий формат:
2020-03-10T14:09:13.3250000 VERB CallingClass 17503 20870 Whatever content: this log line had (etc)
Выражение, которое я создал до сих пор, выглядит следующим образом:
(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}.\d{7})\t([A-Za-z]{4})\t(\w{+})\t(\d{5})\t(\d{5})\t(.*$)
Строки в в этом случае табуляция разделена, хотя разрабатываемое мной приложение будет динамическим c до такой степени, что это не всегда так, поэтому я считаю, что регулярное выражение по-прежнему является лучшим вариантом, даже если оно тяжелее, чем выполнение разбиения.
Разбивка групп более подробно из моего процесса мышления:
Соответствует дате (вместо этого я рассматриваю изменение на число символов топора)
(\ d {4} - \ d {2} - \ d {2} Т \ д {2}: \ д {2}: \ д {2} \ d {7}.)
Соответствует блоку из 4 символов
([A-Za-z] {4})
Соответствует любому количеству символов до следующая вкладка
(\ w {+})
Соответствует блоку из 5 чисел 2 раза
\ t (\ d {5} )
Наконец, сопоставьте все остальное до конца строки. \ t (. * $)
Если я использую сокращенное выражение для следующего, это работает:
(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}.\d{7})\t([A-Za-z]{4})\t(.*$)
Это не включает 3 из групп, слово и 2 номера блоков.
Есть идеи, почему это так?
Спасибо.