2017-06-11 6 views
4

Ich habe Hunderte von Textdateien mit Namen wie: D14 J4N4-BAPN_633nm_20x_100%_30accu_10s_point 1 und D14 J4N5-NOBAPN_633nm_20x_100%_30accu_10s_point 3, wie im Bild unten dargestellt:Wie kann ich Dateinamen mit bestimmten Zeichen nachschlagen

enter image description here

würde Ich mag Dateien auszuwählen, die Name enthält BAPN als eine Gruppe und NOBAPN als eine andere Gruppe. Aber BAPN und NOBAPN enthalten die gleichen Zeichen wie BAPN. Wie kann ich das erreichen?

+0

Wie würdest du es machen, wenn es * keine * gemeinsamen Zeichen gäbe? Ein Satz von Dateinamen enthält "NOBAPN" und der andere Satz (enthält "BAPN", aber * enthält kein "NOBAPN"). –

+0

und Sie wollen Lösungen für Excel, Matlab und Mathematica?Zeigen Sie, was Sie in jeder Sprache versucht haben, oder klären Sie zumindest, was Sie erwarten. – agentp

Antwort

5

Einfache Regex aughta tun, was Sie suchen:

(BAPN)|(NOBAPN) 

kann es hier ansehen - regex101 BAPN

Dies wird genau diese Strings als separate Aufnahmen erfassen, ohne zu überlappen.

+0

Nützlich zu wissen. Ich habe die Anwendung dieses Regex in Mathematica in meiner Antwort demonstriert. –

2

Einfach, wenn Sie den Bindestrich verwenden können.

Select[{"D14 J4N4-BAPN_633nm_20x_100%_30accu_10s_point 1", 
    "D14 J4N5-NOBAPN_633nm_20x_100%_30accu_10s_point 3"}, 
StringMatchQ[#, "*-BAPN*"] &] 
{"D14 J4N4-BAPN_633nm_20x_100%_30accu_10s_point 1"} 

Ansonsten Complement verwenden, um den weniger konkreten Fall zu erhalten.

stringlist = { 
    "D14 J4N4-BAPN_633nm_20x_100%_30accu_10s_point 2", 
    "D14 J4N4-BAPN_633nm_20x_100%_30accu_10s_point 1", 
    "D14 J4N5-NOBAPN_633nm_20x_100%_30accu_10s_point 3", 
    "D14 J4N5-NOBAPN_633nm_20x_100%_30accu_10s_point 2", 
    "D14 J4N5-NOBAPN_633nm_20x_100%_30accu_10s_point 1"}; 

posnobapn = Position[stringlist , _?(StringContainsQ[#, "NOBAPN"] &), Heads -> False]; 
posbapn = Position[stringlist , _?(StringContainsQ[#, "BAPN"] &), Heads -> False]; 

listbapn = Extract[stringlist , Complement[posbapn, posnobapn]] 
{"D14 J4N4-BAPN_633nm_20x_100%_30accu_10s_point 2", 
"D14 J4N4-BAPN_633nm_20x_100%_30accu_10s_point 1"} 
listnobapn = Extract[stringlist , posnobapn] 
{"D14 J4N5-NOBAPN_633nm_20x_100%_30accu_10s_point 3", 
"D14 J4N5-NOBAPN_633nm_20x_100%_30accu_10s_point 2", 
"D14 J4N5-NOBAPN_633nm_20x_100%_30accu_10s_point 1"} 

Auch eine Anwendung des regulären Ausdrucks des Nieminen.

regexcases = StringCases[stringlist, RegularExpression["(BAPN)|(NOBAPN)"]]; 

Pick[stringlist, regexcases /. {"BAPN"} -> True] 
{"D14 J4N4-BAPN_633nm_20x_100%_30accu_10s_point 2", 
"D14 J4N4-BAPN_633nm_20x_100%_30accu_10s_point 1"} 
Pick[stringlist, regexcases /. {"NOBAPN"} -> True] 
{"D14 J4N5-NOBAPN_633nm_20x_100%_30accu_10s_point 3", 
"D14 J4N5-NOBAPN_633nm_20x_100%_30accu_10s_point 2", 
"D14 J4N5-NOBAPN_633nm_20x_100%_30accu_10s_point 1"} 
0

Sie auch dir Befehl verwenden, können Sie die gewünschten Dateien zu sortieren.

Um die Dateinamen mit BAPN zu erhalten:

set1 = dir('*-BAPN*.txt') ; 

Um die Dateinamen mit NOBAPN

set2 = dir('*-NOBAPN*.txt') ; 

set1 und set2 werden Strukturen zu erhalten.

Verwandte Themen