【问题标题】:Extended glob functionality with arithmetic comparison具有算术比较的扩展 glob 功能
【发布时间】:2011-05-13 12:06:02
【问题描述】:

我有几个用例,我希望能够以声明方式指定一组文件,这些文件可能在路径的不同位置有数字(换句话说,数字可能因规范而异但我知道),并且能够在这些数字的范围内指定条件(例如,在 2 到 21 之间)将很有用。我知道可以在正则表达式中指定数字范围,但它很笨拙且容易出错,尤其是在补偿 '01' 与 '1' 之类的东西时。

我的问题是,有人知道提供类似功能的任何语言或库吗?这种东西看起来很通用,很有用,但我不记得看到过类似的东西,而且最初的谷歌搜索也没有发现任何东西。最常见的方法(实际上我想我以前用过)似乎是使用正则表达式组,然后用你正在使用的任何编程语言处理这些组,但这种一次性解决方案并不真正令人满意。

这是我可能正在寻找的示例:

'/base_path/section/(?<n>\d{2})/subsection/(?<i>\d+)/.+' with 3 < n <= 9 and i < 100

这将返回,例如,

/base_path/section/04/subsection/99/*
/base_path/section/09/subsection/000/*

但不是

/base_path/section/01/subsection/0/*

/base_path/section/05/subsection/01000/*

用例

我现在正在研究的主要用例是,我希望能够将文件集合分成两个或多个组以分别处理,部分基于中间出现的节号的路径。这是在以各种配置运行一些 NLP 实验的背景下,我希望能够以声明方式以灵活的方式指定要使用的文件,这样我就不会疯狂地尝试确保正确的文件是每次都在使用。

【问题讨论】:

    标签: language-agnostic glob


    【解决方案1】:

    据我所知,AWK 是在这种情况下要走的路。

    例子:

    echo '/base_path/section/456/subsection/99/' | awk 'BEGIN { FS = "/" } /\/base_path\/section\/[0-9]+\/subsection\/[0-9]+/ { if (($4 >= 400) && ($4 < 1000) && ($6 < 100)) print $0 }'
    

    这将打印示例路径。

    【讨论】:

    • AWK 无疑是一个很好的解决方案,但它比我可能喜欢的更冗长且不够灵活。例如,我认为它不适用于“/some/path/01 title.ogg”之类的东西。
    • 我应该补充一点,您的答案将适用于我当前的用例。我的主要问题是我想要一个更清楚地说明我的意图的解决方案,例如“选择此数字在此范围内的文件,然后对它们执行某些操作”。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-09
    • 1970-01-01
    • 1970-01-01
    • 2021-09-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多