Итак, я ранее работал с js, и у меня есть несколько регулярных выражений, которые я тестировал с помощью regexr и regex101, и они отлично работают. Однако, когда я решил использовать это выражение для VBA, оно перестало работать должным образом.
Исходное js регулярное выражение:
(?: AT FOLLOWING LOCATION[ \w]+\n)?(?: +FX -[\s\S]*?)((?:MP[ ]+[\d.\w]+[ -]+?[\w\b .\/]+)(?:[ -]+[\w\b .\/]+$)?)[\s\S]*?(?:\d+\.+\d\d[\) ]+(?:FT.? *\n|IN.? *\n)|USE X AT MP +\d{1,3}\.\d{1,3}|(?=\n {4}\w)|(?=\n {2}\()|$)
Ради нашего При обсуждении, давайте воспользуемся следующим примером соответствия:
FX - LALALA:
MP 123 - TEST - TESTER WORLD
NOTICE THAT I AM HERE TOO`
Первоначально протестированное регулярное выражение vba было таким же, и оно не сработало. Итак, я начал искать дальше и тестировал куски по одному и заметил, что проблема, кажется, l ie в \n
. В приведенном выше примере это будет (?:[ -]+[\w\b .\/]+$)?
, которое не удалось, и я протестировал [ -]+[\w\b .\/]+
, и он работал, а [ -]+[\w\b .\/]+\n
- нет (флаги gim были включены). Я не понимаю, почему он работал с js и другими алгоритмами - похоже, \ n разрешено с vba Regex?
И, что более важно, кроме понимания того, почему он ведет себя именно так сделал, как лучше всего заставить его работать?
Edit 1:
На основании комментариев я заменил \n
на [\r\n]+
. При этом он работал с моими строками тестера, в которых в качестве разрывов строк используется vbCrLf
. Однако при применении к фактическому документу он больше не работал. Похоже, что текст, прочитанный из документа, отображается как стрелка вверх при отображении через debug.print()
. Я попытался выделить его, но когда я это сделаю, он изменится со стрелки вверх на пустой квадрат (как один из этих нечитаемых символов). Я попытался скопировать текст документа в Notepad ++, чтобы лучше читать символы, и оказалось, что это CrLf, но я не знаю, изменил ли что-то буфер обмена или нет. Символ, показанный в слове, показывает это как мягкий возврат вместо жесткого возврата. Что мне еще не хватает?