如何查找具有特定字符的文件名
我有几百个文本文件,名称如下: D14 J4N4-BAPN_633nm_20x_100%_30accu_10s_point 1
和D14 J4N5-NOBAPN_633nm_20x_100%_30accu_10s_point 3
如下图所示:
我想select名称中包含BAPN
作为一个组和NOBAPN
作为另一个组的文件。 但BAPN
和NOBAPN
包含与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') ;
set1和set2将是结构。