2014-09-29 3 views
0

Во-первых, ответ должен быть с помощью Regex, не предполагают обработку строк с использованием .NET или Java и т.д. ...Регулярное выражение для поиска файлов, которые начинаются с, содержат или заканчиваются серии символов

Мне нужно найти если полное имя файла, исключая путь, содержит ряд символов.

Я могу искать имя файла, но не могу пройти мимо каталогов и подкаталогов.

Так например:..

Шаблон он + TXT будет соответствовать C: \ Temp \ help.txt, но также соответствует C: \ пеньки \ felp.txt, я стараюсь, чтобы избежать позже.

Я могу извлечь имя файла из каталога с помощью выражения [^ \] + $, но недостаточно знакомого с регулярным выражением, чтобы выполнить то, что я хочу, с одним выражением. Я тоже начал заниматься группировкой.

+1

Вам нужно будет предоставить еще несколько примеров, поскольку ваше объяснение открытия («* включая путь *») полностью противоречит вашему более позднему анти-примеру («* Я пытаюсь избежать более позднего. *»). – JDB

+0

Выражение регулярного выражения, которое будет соответствовать только части имени файла полного пути к файлу. Таким образом, выражение, подобное ему. + \. Txt, будет соответствовать 1 и 2, но я хочу, чтобы не было 2 включенных. 1.c: \ temp \ help.txt 2.c: \ hemp \ felp.txt – domenicr

+0

Вы понимаете, как «* Мне нужно найти, если полное имя файла, включая путь, начинается с, содержит или заканчивается серия символов. * "может быть запутанным? – JDB

ответ

0

Вы уже были строительные блоки все выстроились:

\bhe[^\\]*\.txt$ 

будет соответствовать только c:\temp\help.txt и не c:\hemp\felp.txt или c:\temp\shelp.txt.

Объяснение:

\b  # Start of alphanumeric word 
he  # Match "he" 
[^\\]* # Match any number of characters except backslashes 
\.txt # Match ".txt" 
$  # Make sure we're at the end of the string 

Если вы хотите, чтобы убедиться, что матч начинается после \ символа (или, возможно, начало строки, если нет пути до файла), вы можете использовать positive lookahead assertion если ваш движок регулярных выражений поддерживает их:

(?<=^|\\)he[^\\]*\.txt$ 

(?<=^|\\) означает «Утверждают, что текущая позиция находится в начале строки (^) или сразу после обратной косой черты.

+0

только что пропустил newaz demo http://regex101.com/r/nA6hN9/34 – vks

+0

Как ограничить совпадения именами файлов, которые начинаются только с «he», с вашими именами файлов решений с c: \ temp \ shelp.txt также будет соответствовать , – domenicr

+1

@domenicr - Один из способов: '(?:^| (? <= \\)) he [^ \\] * \. Txt $' – sln

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