Разрешить только текст и несколько нулей перед числом, но не [1-9] - PullRequest
0 голосов
/ 05 ноября 2018

Я пытаюсь сопоставить номера документов в файле Excel с файлами в папке.

Пример файловых каталогов:

A) "C: \ Users \ directory \ Supplier \ Invoice1.pdf"

B) "C: \ Users \ directory \ Supplier \ Invoice001.pdf"

C) "C: \ Users \ directory \ Supplier \ Invoice101.pdf"

D) "C: \ Users \ directory \ Supplier \ Invoice10.pdf"

E) "C: \ Users \ directory \ Supplier \ Invoice21.pdf"

Мой шаблон регулярных выражений соответствует A, B и C, но должен соответствовать только A и B.

Pattern = "(^|[^1-9])(DocNumber)([^0-9]|$)", где DocNumber = 1 в моем примере (также может быть любым другим числом).

Любые идеи о том, как я могу улучшить мою формулу, чтобы не соответствовать C?

ПРИМЕЧАНИЕ: я вижу, что другие темы, подобные этой, непопулярны, поэтому я попытался прояснить мою проблему, поскольку другие не дали мне решения.

1 Ответ

0 голосов
/ 05 ноября 2018

Попробуйте что-то вроде этого: ^.*[\\\/][^0-9]*0*1\..*$

Пример, показанный здесь: https://regex101.com/r/O7RdEq/4

Пояснение:

  • ^.*[\\\/] - сопоставить все до последнего слеша
    • [\\\/] - соответствует либо одному обратному слешу, либо одному прямому слешу; обратите внимание, что обе косые черты экранируются с помощью обратной косой черты.
  • [^0-9]*0*1\..*$ - соответствует каждому нечисловому номеру вплоть до любых ведущих нулей, за которыми следует номер документа, а затем расширение файла.
    • [^0-9]* - Соответствует любым не числам перед необязательными '0; предотвращает случаи как '101'
    • 0*1 - необязательные '0' перед номером документа (в данном случае 1)
    • \..*$ - соответствует литералу ., затем любым символам до конца строки; должен обрабатывать расширения файлов.

1 после 0* - это номер документа, который вы упомянули в своем вопросе.

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