2015-09-01 5 views
0

Рассматривая путь для Windows-стиль, как:Regex чтобы соответствовать имени файла пути

c:\foo bar\a\b\c\xtesty 

Что такое регулярное выражение, которое подтверждает, что имя файл (xtesty в приведенном выше примере) содержит слово "теста "?

Примечание: это вопрос с регулярным выражением, использование методов файловой системы, таких как System.IO in .net, не является вариантом;

Примечание2. В качестве stribizhev указывает, что существует несколько вариантов разделителей путей в разных культурах и операционных системах. Этот вопрос предназначен только для en-us и Windows, поэтому разделитель is/

Контекст: Я предлагаю пользователям возможность указать регулярное выражение в качестве параметра для соответствия некоторым путям. По умолчанию это регулярное выражение должно быть - любое имя файла (а не весь путь!), Который содержит слово «тест»

+0

Вы имеете в виду это '[^ \ /] * $' –

+0

Нет, это не задание регулярного выражения, почти все языки программирования могут легко справиться без регулярного выражения. Что вы используете для этой задачи? –

+0

разделить на \ и получить последний индекс. –

ответ

1

Я предлагаю использовать это регулярное выражение:

[^\\¥]*test[^\\¥]*$ 

См demo

немного быстрее, один с атомными группами (не знаю, почему .NET регулярное выражение двигатель по-прежнему не поддерживает притяжательные кванторы :():

(?>[^\\¥]*test)(?>[^\\¥]*$) 

Дело в том, что есть другие, чем \ разделители пути, например, YEN SIGN, который используется в японской ОС. Кроме того, если вы планируете включить переменные, они должны быть экранированы (на всякий случай, чтобы играть в сейф, с Regex.Escape).

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

Смежные вопросы