Я пытаюсь использовать регулярное выражение для сопоставления всех папок, содержащих файл .Trash
, но когда мы находим подпапку определенного слоя с .Trash
, я не хочу сопоставляться.
Я использую /[^/]+/*.Trash
, но он также соответствует подпапке .Trash
.
Как я могу игнорировать подпапки?
Например:
/a/b/.Trash+other words -> good
/a/b/.Trash -> good
/a/b/.blahTrash -> good
/a/.Trash -> good
/a/b/.Trash/c/d -> bad, because we already found /a/b/.Trash
Поскольку за .Trash
могут следовать другие символы или цифры, поэтому я не могу использовать .Trash
, за которым не следует /
.
Спасибо за ваш комментарий. пожалуйста, посмотрите мой первый пример, потому что иногда у меня есть другие символы после .Trash, поэтому добавление $ не соответствует.
Попробуйте ^/[^/]+/[^/]+/[^/]*Trash
, см. regex101.com/r/fzAaAI/1
/a/b/.blahTrash
не содержит .Trash
, почему это хорошо?
Какую версию регулярного выражения вы используете? Если возможно, проще всего сделать эквивалент contains('.Trash') AND NOT contains('.Trash/')
Не могли бы вы объяснить, почему /a/b/.blahTrash
«хороший», если он не содержит «.Trash»?
Я пишу запрос Hive, используя регулярное выражение. Я думаю, что причина, по которой он соответствует .blahTrash, заключается в том, что это . рассматривается не как точка, а как "любые символы".
Вы можете использовать следующее регулярное выражение:
^(?:/[^/\s]+)+Trash[^/]*$
Демо: https://regex101.com/r/lRp4lF/3/
/a/b/.Trash -> good
/a/b/.Trash+other words -> good
/a/b/.Trash -> good
/a/b/.blahTrash -> good
/a/.Trash -> good
/a/b/.Trash/c/d -> bad
Спасибо, ваш ответ очень близок. Но он соответствует только /a/b/.Trash (с пробелом или другими символами), и если это просто /a/b/.Trash, он не соответствует.
@RaeR: я отредактировал свой ответ, новое регулярное выражение также соответствует /a/b/.Trash
, посмотрите также ссылку
Вы можете получить некоторое представление об этом.
**(.*trash[^/]+)**
Match 1
1. /a/b/.Trash+other words -> good
Match 2
1. /a/b/.Trash -> good
Match 3
1. /a/b/.blahTrash -> good
Match 4
1. /a/.Trash -> good
https://rubular.com/r/kGvbSIkHFfT9dM
Спасибо, но это все еще есть /a/b/.Trash/c/d. Я хочу отфильтровать это.
Добавьте
$
в конце, чтобы указать конец строки.