Регулярное выражение VBA против других регулярных выражений - я не понимаю, зачем он это делает? - PullRequest
0 голосов
/ 09 июля 2020

Итак, я ранее работал с 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, но я не знаю, изменил ли что-то буфер обмена или нет. Символ, показанный в слове, показывает это как мягкий возврат вместо жесткого возврата. Что мне еще не хватает?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...