如何查找包含特定字符的文件名

4
我有数百个文本文件,名称类似于: 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相同的字符。我该如何做到这一点?

如果没有共同的字符集,你会怎么做呢?一个文件名集合包含“NOBAPN”,而另一个集合包含“BAPN”但*不包含“NOBAPN”。 - Tim Williams
你需要针对Excel、Matlab和Mathematica的解决方案吗?请展示你在每种语言中尝试过什么,或者至少澄清你期望得到什么。 - agentp
3个回答

5

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

(BAPN)|(NOBAPN)

你可以在这里查看 - regex101 BAPN

这将捕获那些精确的字符串作为独立的匹配项,且不会重叠。


有用的知识。我在我的答案中展示了在Mathematica中应用这个正则表达式的方法。 - Chris Degnen

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"}
否则,请使用补集来获得不太具体的情况。
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"}

0

你也可以使用 dir 命令来对你想要的文件进行排序。

使用 BAPN 获取文件名:

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

获取没有NOBAPN的文件名
set2 = dir('*-NOBAPN*.txt') ;

set1set2将是结构体。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接