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

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

在这里输入图像说明

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

简单的正则expression式aughta做你正在寻找的东西:

 (BAPN)|(NOBAPN) 

可以在这里查看 – regex101 BAPN

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

如果你可以使用连字符,很容易。

 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的正则expression式的应用。

 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"} 

您也可以使用dir命令对您想要的文件进行sorting。

用BAPN获取文件名:

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

使用NOBAPN获取文件名

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

set1set2将是结构。