Я искал, но не нашел ответа на вопрос - возможно, это настолько очевидно, что никто не должен был спрашивать ...
Я использую UltraEdit 16.00
, чтобы запустить Regular Expressions in PERL mode
...
Ситуация:
У меня есть строка с разделителями, которая может содержать переменное количество повторяющихся сегментов, которые должны соответствовать очень специфическому формату.Эти сегменты встречаются случайным образом по всей строке с разделителями.
Пример:
CLP*data*data*data~REF*data*data~N1*data*data*data~**CAS*OA*29*99.99**~AMT*I*99.99~SVC*data*data*data*data~**CAS*PR*99.99**~**CAS*CO**99.99**~DTM*150*date~AMT*B6*99.99~SVC*data*data*data*data~CAS*PR*N16*99.99~**CAS*CO* *99.99**...line continues from here.
Правильный формат - CAS*OA*29*99.99~
Неверный формат 1 - CAS*OA* *99.99~
Неверный формат 2 - CAS*OA**99.99~
Цель:
Определитьтолько те строки, где ВСЕ сегменты CAS придерживаются формата.
Вещи, которые я пробовал:
(Кстати: я знаю, что мои регулярные выражения не оптимизированы, поэтому, пожалуйста, дайте мне перерыв)
Сегмент CAS отсутствует или содержит одноили более пробелов
CAS\*(OA|PR|CR|CO)\*\*[-]?[\d]+\.?[\d]{0,2}
~ соответствует первому экземпляру, если находки
CAS\*(OA|PR|CR|CO)\*[\s]+?\*[-]?[\d]+\.?[\d]{0,2}
~ соответствует первому экземпляру, если найдены
CAS сегмент НЕ отсутствует или содержит пробел (ы)
CAS\*(OA|PR|CR|CO)\*[^0-9A-Z]+?\*[-]?[\d]+\.?[\d]{0,2}~
Опять же, соответствует первому экземпляру
Отрицательный взгляд вперед с использованием комбинаций выше (я новичок в этом подходе)
^(?:(?!ab).)+$
- ab
=>one of the above regular expressions
- никогда не заставлял его работать
Вопрос:
Как мне написать регулярное выражение для принудительного применения / проверки формата экземпляра КАЖДОГО CAS, независимо от того, как часто это происходит (естьпотенциал для 0 экземпляров)?