我有数百个文本文件,其名称如下:
D14 J4N4-BAPN_633nm_20x_100%_30accu_10s_point 1
和D14 J4N5-NOBAPN_633nm_20x_100%_30accu_10s_point 3
,如下图所示:
我想选择名称中包含BAPN
的文件作为一个组,将NOBAPN
作为另一个组。但BAPN
和NOBAPN
包含与BAPN
相同的字符。我怎样才能做到这一点?
答案 0 :(得分:5)
答案 1 :(得分:2)
如果你可以使用连字符,那很容易。
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"}
否则使用Complement
来获取不太具体的案例。
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"}
此外,应用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"}
答案 2 :(得分:0)
您还可以使用 dir 命令对所需文件进行排序。
使用BAPN获取文件名:
set1 = dir('*-BAPN*.txt') ;
使用NOBAPN获取文件名
set2 = dir('*-NOBAPN*.txt') ;
set1 和 set2 将是结构。