regex 自动查找文件名中的编号模式

bybem2ql  于 12个月前  发布在  其他
关注(0)|答案(3)|浏览(99)
  • 介绍 *

我在一个有显微镜的机构工作。这些人可以被要求生成一个样本的4D电影:他们采取例如。在不同的Z位置拍摄10张照片,然后等待一定的时间(下一个时间点)并再次拍摄10张切片。可以要求它们为每个切片保存一个文件,并且它们使用显式的命名模式,类似于2009-11-03-experiment1-Z07-T42.tif。对文件名进行编号以反映Z位置和时间点

  • 问题 *

有了所有这些文件名之后,如果知道文件名的 Backbone.js 模式,就可以使用regex模式来提取Z和T值。我知道怎么做。
我的问题是你知道一种方法来自动生成正则表达式模式从文件名列表?例如,网上有一个很棒的工具可以做类似的事情:txt2re
你会使用什么算法来解析所有的文件名列表,并生成一个最可能的正则表达式模式?

iih3973s

iih3973s1#

有一个名为String::Diff的Perl模块,它能够为两个不同的字符串生成正则表达式。它给出的例子是

my $diff = String::Diff::diff_regexp('this is Perl', 'this is Ruby');
print "$diff\n";

产出:

this\ is\ (?:Perl|Ruby)

也许你可以把成对的文件名输入到这类东西中,以获得初始正则表达式。然而,这不会给你给予捕捉数字等。所以它不会是完全自动的。在得到diff之后,你必须手工编辑或做一些替换来得到一个可用的final正则表达式。

h22fl7wq

h22fl7wq2#

首先,你是想用强硬的方式我怀疑这可能不是不可能的,但你必须应用一些人工智能技术,这将比它的价值复杂得多。神经网络或遗传算法系统都可以被训练来识别Z数和T数,假设Z[0-9]+T[0-9]+的格式总是在正则表达式中的某个地方使用。
对于这个问题,我会写一个Python脚本来处理所有的文件名。在这个脚本中,我将对文件名进行两次匹配,一次查找Z[0-9]+,另一次查找T[0-9]+。每一次我都会计算Z数和T数的匹配。
我会保留另外四个计数器,其中两个用于Z数字,两个用于T数字。每一对将代表具有1个匹配项的文件名的计数,以及具有多个匹配项的文件名的计数。我会计算处理的文件名总数。
最后,我要报告如下:

nnnnnnnnnn filenames processed

Z-numbers matched only once in nnnnnnnnnn filenames.
Z-numbers matched multiple times in nnnnnn filenames.

T-numbers matched only once in nnnnnnnnnn filenames.
T-numbers matched multiple times in nnnnnn filenames.

如果你幸运的话,根本不会有多个匹配,你可以使用上面的正则表达式来提取你的数字。但是,如果存在大量的多个匹配项,则可以使用一些print语句再次运行该脚本,以显示引发多个匹配项的示例文件名。这将告诉您对正则表达式的简单调整是否可行。
例如,如果您有23,768个多个匹配的T号,那么让脚本打印每第500个文件名与多个匹配,这将给您给予47个样本进行检查。
也许像[ -/.=]T[0-9]+[ -/.=]这样的东西就足以将多个匹配项降为零,同时还为每个文件名提供一次匹配。或者最坏的情况下,[0-9][ -/.=]T[0-9]+[ -/.=]

rta7y2nd

rta7y2nd3#

对于Python,请参阅有关TemplateMaker的this问题。

相关问题