REGEX - Как найти два дефиса в имени файла? - PullRequest
2 голосов
/ 20 марта 2019

Я хотел бы найти имена файлов, которые содержат два дефиса (только).В некоторых именах файлов есть один дефис, я просто хочу, чтобы в имени было два дефиса:

ЭТО: некоторый текст - больше текста - все же more.txt

НЕ ЭТО: немного текста - больше text.txt

Дефисы всегда окружены пробелом, FWIW.

Я пытался использовать (.*) - (.*) - (.*) и пару вариантов, норезультаты не то, что я ищу.Я либо получаю ничего, либо имена файлов только с одним дефисом, когда я пробую различные комбинации.

Я знаю, что это очевидное явление, но я пробовал пройтись по учебникам по регулярным выражениям относительно жадных , смотрите вперед и т. д., но я не могу решить эту проблему.Кто-нибудь может помочь?Я не ищу только решение - я хотел бы понять, что я делаю неправильно в синтаксисе регулярных выражений.

1 Ответ

5 голосов
/ 20 марта 2019

Вы можете использовать это регулярное выражение,

^[^-]*(?:-[^-]*){2}$

Это при написании в развернутом виде будет выглядеть так:

^[^-]*-[^-]*-[^-]*$

Как вы и хотели, но я сжалэто с помощью квантификатора, чтобы ограничить использование дефиса только двумя.

Демо

Если вы хотите расширить свое регулярное выражение, просто измените.* до [^-]*, чтобы сделать это регулярным выражением, в противном случае .* будет сопоставлять дополнительные дефисы, что также приведет к неожиданным результатам матча.

^([^-]*) - ([^-]*) - ([^-]*)$

Обратите внимание, что вы должны использовать начало ^ и конец $якоря, чтобы имя файла соответствовало всему регулярному выражению.

Демонстрация с измененным регулярным выражением

...