2016-12-12 1 views
1

Ich habe eine Reihe von CSV-Dateien mit der Struktur SC [x] wordswordswords [ending] .csv, wobei [x] eine ansteigende Ganzzahl ist, und [ending ] ist 2 Zeichen vor dem Dateityp. zB: SC3performanceOverview ES .csv; SC4performanceSubstitute SL CSV, etc. Mein aktueller Code ist wie folgtMit regexp in Matlab, um bestimmte Datei von Anfang und Ende Komponenten des Dateinamens zu finden

searchNum = 3; 
searchCrit = strcat('Sc', num2str(searchNum)); 
searchEnding = 'TS'; 

list = dir('*.csv'); 
list = {list.name}; 
rgx1 = regexp(list,searchCrit); 
rgx1 =~ cellfun('isempty',rgx1); 
listNew = list(rgx1); 
rgx2 = regexp(listNew,searchEnding); 
rgx2 =~ cellfun('isempty',rgx2); 
OutputName = char(listNew(rgx2)) 

Dies auf einem Code-Schnipsel basiert ich in altem Code im Umlauf war. Dies scheint eine unglaublich klobige Art der Verwendung von Regexp zu sein, und ich bin mir sicher, dass es einen besseren Weg geben muss, meine Datei mit nur einer Verwendung von Regexp zu finden, aber ich bin mir nicht sicher, wie. MathWorks war nicht viel Hilfe, und ich konnte diese genaue Frage nicht anderswo auf SO finden. Danke im Voraus.

+3

Versuchen Sie 'strcat ('^', searchCrit, '. *', SearchEnding, '[.] Csv $')' anstelle der ersten Regex. –

+0

@ WiktorStribiżew Danke, wenn Sie dies eine Antwort machen, markiere ich es beantwortet. – alzinos

Antwort

2

Sie einen regulären Ausdruck verwenden, um die Ergebnisse zu filtern:

strcat('^', searchCrit, '.*', searchEnding,'[.]csv$') 

Das Muster bedeutet:

  • ^ - Beginn der Zeichenfolge
  • searchCrit - Ihre searchCrit Unter-Pattern
  • .* - jeder 0+ Zeichen
  • searchEnding - die searchEnding Unter-Pattern
  • [.]csv$ - ein wörtlicher Punkt, csv und das Ende der Schnur Ankers ($).
Verwandte Themen