如何查找具有特定字符的文件名

时间:2017-06-11 03:30:53

标签: excel matlab select wolfram-mathematica

我有数百个文本文件,其名称如下: D14 J4N4-BAPN_633nm_20x_100%_30accu_10s_point 1D14 J4N5-NOBAPN_633nm_20x_100%_30accu_10s_point 3,如下图所示:

enter image description here

我想选择名称中包含BAPN的文件作为一个组,将NOBAPN作为另一个组。但BAPNNOBAPN包含与BAPN相同的字符。我怎样才能做到这一点?

3 个答案:

答案 0 :(得分:5)

简单的正则表达式可以满足您的需求:

(BAPN)|(NOBAPN)

可以在这里查看 - regex101 BAPN

这将捕获那些确切的字符串作为单独的捕获而不重叠。

答案 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 将是结构。