Мой друг сказал, что если регулярное выражение, которое я использую, слишком длинное, то это, вероятно, неправильный инструмент для работы.Есть мысли о том, как лучше разобрать этот текст?У меня есть регулярное выражение, которое возвращает все в массив, который я легко могу разделить на части, но если есть еще один более простой способ, я бы очень хотел его увидеть.
Вот как это выглядит:
2 AB 123A 01JAN M ABCDEF AA1 100A 200A 02JAN T /ABCD /E
Вот пример этого:
2
- номер строки, они варьируются от 1
до 99
.Если вы не видите из-за форматирования, есть префикс пробела с числами меньше 10.
Пробел можно заменить или не заменить на *
AB
- важная единица данных (UOD).
AB
может предшествовать /CD
, что является еще одним важным UOD.
123
является важным UOD.Он может варьироваться от 1
(с добавлением 4 пробелов) до 99999
.
A
является важным UOD.
01JAN
- это комбинация день / месяц, мне нужно извлечь оба UOD.
M
- это краткая форма названия дня.Это может быть число от 1
до 7
.
ABC
является важным UOD.
DEF
являетсяважный UOD.
Пробел после DEF
может быть *
AA1
может быть нулевым символом или может быть 5. Этоневажно.
100A
является отметкой времени, но может иметь формат 1300
.A
может быть N
, когда время составляет 1200
или P
для времени в PM.
Затем мы видим другую метку времени.
Следующая часть даты может отсутствовать, например, это действительно:
93*DE/QQ51234 30APR J QWERTY*QQ0 1250 0520 /ABCD*ASDFAS /E
Данные, где появляется /ABCD*ASDFAS /E
, не имеют отношения к приложению,но здесь может появиться вторая отметка даты.Передняя косая черта может быть чем-то другим (например, буквой).
Примечание:
Это не ограничено пробелом, некоторые части тела работаютв другие.Положение символов является точным только для первых двух или трех элементов в списке
Не думаю, что я ничего пропустил, но, если есть более простой способ разобрать строку, подобную этой, чем написание регулярного выражения,пожалуйста, дайте мне знать.