2017-01-27 1 views
0

파일이 많은 폴더가 있고 특정 패턴의 파일 이름을 포함하는 행렬을 만들고 싶습니다. 예 : 폴더에는 제목 번호 (예 : 03T1A.xxx.nii, 03T1A.yyy.nii)로 시작하는 파일과 중간에 특정 패턴이있는 파일 이름이 포함됩니다 (예 : 03T1A.c100.nii, 03T1A.c200). nii, 03T1A.c300.nii). 이 특정 경우에 나는 중간에 패턴 c1과 c2 (예 : 03T1A.c100.nii 및 03T1A.c200.nii이지만 03T1A.c300.nii는 아님)와 함께 모든 파일 이름을 추출하려고합니다. 난 I 변수 'all_files' 비아로 추출한 파일명 셀 어레이에 적용하고자하는'패턴'가변 일치하는 패턴을 생성하기 위해 다음 코드를 사용하고이 시점셀 배열의 Matlab regexp를 사용하여 특정 파일 이름 반환

dir 전화.

func_path = char(strcat(input_dir, '/', subs(files), '/Func')); 
pattern = 'c[12]*.nii' 
all_files = dir(func_path); 
all_files = {all_files.name}; 
내가 사용하고 싶습니다

정규 표현식을 (연습. 읽기) 및 문자열 입력과 함께 그 일을하는 것은 쉬운 것 같다하지만 난 100 % 셀 입력으로 작업을 수행하는 방법으로 난처한 상황에 빠진입니다. 내가 이런 일을하려고 시작 :

files = all_files(cellfun(@(x)regexp(x, pattern)); 

을하지만, 분명히 작동하지 않습니다. 궁극적 인 목적이 관련 파일 이름만으로 매트릭스 출력을 얻는 것이라면 누군가 내가 여기서 무엇을해야 할지를 결정할 수 있습니까? 나는 MATLAB 답변 및 기타 스택 오버플로 게시물을 검색했지만 내 문제의 일부는 코드 스 니펫에서 무슨 일이 일어나고 있는지 이해할 수 없다. 위의 줄을 다른 게시판에서 가져 왔지만 (예 : 'x'는 출력 변수입니까?) 또는 큰 명령 (예 :

)에서 무슨 일이 일어나는지 알 수 없습니다.
fin = cellfun(@(x)regexp(x, '\.', 'split'), res, 'UniformOutput', false) 

다른 스레드에서 발견되었습니다. 기본적으로 누군가 나에게 설명하는 동안 작동 할 명령을 알아낼 수 있습니까?

+2

'regexp'으로이 모든 것을 피할 수,

pattern = 'c[12].*\.nii'; 
  • 같은 것을 사용합니다 기본적으로 셀 어레이에서 작동하므로'cellfun'을 사용할 필요가 없습니다. 또한 [표현식] (https://regex101.com/r/srr2Pg/1)을 만들기위한 놀이터로 ['Regex 101'] (https://regex101.com/)도 참고하십시오. – excaza

  • +0

    원래 명령을 사용하려고 했었습니다. x = regexp (all_files, pattern, 'match') 그러나 'all_files'와 같은 크기의 빈 셀 배열을 반환합니다. – chainhomelow

    +0

    그러면 '패턴'이 일치하지 않습니다. – excaza

    답변

    관련 문제