2017-01-22 4 views
0

Я пытаюсь искать определенные файлы в каталоге с помощью шаблонаПоиск файлов с определенным рисунком

Допустим, у меня есть идентификатор пользователя - 101

здесь мои файлы

101 
101_2 
101_5 
10111 
103 
10125 
101_6 

Я пытаюсь сформировать шаблон регулярного выражения, который только дает мне файлы (101,101_2,101_5,101_6)

Я пытаюсь ниже шаблон

^101_?\d+$ 

но, похоже, он вообще не отображает файлы. если я удаляю ^. Всего только 101_6 матчей.

EDIT:

Я использую рельсы/рубин искать файлы в определенном каталоге. так что-то вроде

Dir.glob(location).grep("^101_?\d+$") 
do something 
end 
+1

Можете ли вы показать, как вы использовать регулярное выражение для поиска файлов? – chengpohi

+0

Попробуйте заменить '+' в '^ 101 _? \ D + $' на '*'. –

+1

Если вы используете 'Dir.glob', это glob, а не регулярное выражение. – Samadi

ответ

0

Ваш вопрос не очень понятно, но я предполагаю, что вы хотите, чтобы соответствовать ничего, что 101 с последующим дополнительным подчеркиванием и цифры. Если да, используйте регулярное выражение ^101_?\d$. Если вы хотите 101 следует либо цифра или знак подчеркивания и одного или более цифр, используйте ^101(_\d+|\d)$

EDIT

Как ОП отметили в комментариях, 101 должны быть согласованы. Обновленный регулярное выражение ^101(?:_?\d)?$

+0

Я также пытаюсь захватить 101 файл (без подчеркивания). но затем он также захватывает файлы вроде 101124 или 1011 и т. д. – Kannaj

+0

понял это. Он работает, если я использую '^ 101 _? \ d? $' – Kannaj

+0

@Kunkka, используйте '^ 101 (?: _? \ d) ? $ 'вместо этого. Ваш будет соответствовать '101_' – Samadi

1

Если location не в текущей папке, пути возвращаемый glob будет содержать и имя-каталога: базовое имя

Dir.glob('./*').select{ |f| File.basename(f) =~ /\A101(_\d+)?\z/ }.each do |f| 
    puts f 
    # do something with f 
end 
Смежные вопросы