Улучшение регулярного выражения для записи файлов в каталог, исключая точечные файлы - PullRequest
2 голосов
/ 29 мая 2020

Я хочу получить все файлы без точек в папке с определенным расширением. Пока мое регулярное выражение:

enter image description here

Есть ли способ улучшить указанное выше регулярное выражение? Какие могут быть примеры, когда это регулярное выражение может не работать?

Ответы [ 2 ]

2 голосов
/ 29 мая 2020

\w+ будет соответствовать только одной или нескольким буквам, цифрам или _. Он не будет соответствовать остальным символам, которые могут составлять допустимое имя файла. Кроме того, ваш (?<!\.) lookbehind является избыточным, потому что предыдущий lookbehind уже исключает точку в этой позиции.

Кроме того, вам не нужно повторять шаблон запятой, вы можете использовать группировку только для расширений.

Вы можете использовать

(?<=\/|^)([^\/]+)(\.(?:mov|py))$

См. эту демонстрацию регулярного выражения

  • (?<=\/|^) - / или начало строки разрешено сразу слева
  • ([^\/]+) - Группа 1: любой один или несколько символов, кроме /
  • (\.(?:mov|py)) - Группа 2: символ ., а затем либо mov, либо py
  • $ - конец строки /

Обратите внимание, что вы также можете заменить (?<=\/|^) на (?<![^\/]) в реальном коде, поскольку он будет работать так же с автономными строками. Это испортит результаты демонстрации на regex101.com, потому что там вы проверяете одну многострочную строку (именно поэтому я добавил \n к классу инвертированных символов и там).

0 голосов
/ 29 мая 2020

Вот как я бы это сделал:

(?<=\/|^)[^\/\\:*?"<>|\n]+\.(?:mov|py)$
  • (?<=\/|^) Взгляд назад, как и у вас
  • [^\/\\:*?"<>|\n]+ Один или несколько любых символов, которые не запрещены в именах файлов
  • \. Буквальная точка
  • (?:mov|py) Либо "mov", либо "py" в группе без захвата (аналогично вашей, но я переместил точку и исключил избыточный "|")
  • $ Привязывает поиск к концу строки, поэтому будут совпадать только файлы, без папок
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...