Расширенная функциональность глобуса с арифметическим сравнением - PullRequest
0 голосов
/ 13 мая 2011

У меня есть пара случаев использования, где я хотел бы иметь возможность декларативно указывать набор файлов, которые могут иметь номера в разных местах в пути (другими словами, где число (числа) может варьироваться в зависимости от спецификации).но мне это известно), и было бы полезно уточнить условия для диапазона этих чисел (например, от 2 до 21).Я знаю, что можно указывать диапазоны чисел в регулярных выражениях, но это неуклюже и подвержено ошибкам, особенно при компенсации таких вещей, как «01» против «1».

Мой вопрос: кто-нибудь знает какой-нибудь язык?или библиотека, которая обеспечивает аналогичную функциональность?Подобные вещи кажутся достаточно общими, чтобы быть полезными, но я не могу вспомнить, чтобы увидеть что-то подобное, и первоначальный поиск в Google ничего не дал.Наиболее распространенный подход (я думаю, я использовал его раньше, на самом деле), кажется, использует группы регулярных выражений, а затем обрабатывает их с любым языком программирования, который вы используете, но такого рода одноразовое решение на самом деле не удовлетворяет *.1003 *

Вот пример того, что я могу искать:

'/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 в различных конфигурациях, и я хотел бы иметь возможность декларативно указывать, с какими файлами работать гибко, чтобы я не сходил с ума, пытаясь убедиться, что нужные файлыиспользуется каждый раз.

1 Ответ

1 голос
/ 13 мая 2011

Насколько я знаю, 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 }'

Это напечатает пример пути.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...