【问题标题】:How can I look up file name with specific characters如何查找具有特定字符的文件名
【发布时间】:2017-06-11 03:30:52
【问题描述】:

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

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

【问题讨论】:

  • 如果没有没有一组共同的字符,你会怎么做?一组文件名包含“NOBAPN”,另一组(包含“BAPN”但*不包含“NOBAPN”)。
  • 您想要excel、matlab 和mathematica 的解决方案吗?用每种语言展示您尝试过的内容,或者至少说明您的期望。

标签: excel matlab select wolfram-mathematica


【解决方案1】:

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

(BAPN)|(NOBAPN)

可以在这里查看 - regex101 BAPN

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

【讨论】:

  • 知道有用。我已经在我的回答中展示了这个正则表达式在 Mathematica 中的应用。
【解决方案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"}

【讨论】:

    【解决方案3】:

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

    使用 BAPN 获取文件名:

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

    使用 NOBAPN 获取文件名

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

    set1set2 将是结构。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-11-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-13
      • 1970-01-01
      • 2016-02-01
      相关资源
      最近更新 更多