регулярное выражение для путей к файлам - PullRequest
1 голос
/ 20 марта 2010

Привет, мне нужно регулярное выражение, которое даст мне что-то вроде этой части

./something\", [something.sh

из чего-то вроде этой строки

("./something\", [something.sh", ["./something\", [something.sh"], [/* 37 vars */])

это возможно? У меня возникли реальные проблемы с этим, поскольку есть эта escape-последовательность, а также символ ',', поэтому я не могу просто использовать соответствие всем вместо этих символов. Я работаю над Unix, поэтому также можно использовать конвейер из нескольких greps или что-то в этом роде. Спасибо за совет.

Ответы [ 4 ]

1 голос
/ 20 марта 2010

Ваш ввод выглядит как литерал Python. Вы можете оценить это как:

$ echo '("./something\", [something.sh", ["./something\", [something.sh"], )' |\
> python -c'print input()[0]'

Выход:

./something", [something.sh

Или для многострочного регистра:

$ echo '("./something\", [something.sh", ["./something\", [something.sh"], )' |\
> python -c'import ast, fileinput
> for line in fileinput.input():
>      print ast.literal_eval(line)[0]'

Выход:

./something", [something.sh
1 голос
/ 20 марта 2010
echo '("./something\", [something.sh", ["./something\", [something.sh"], [/* 37 vars */])' |
sed 's/.*\(\.\/something\\", \[something.sh"\).*/\1/'
1 голос
/ 20 марта 2010

С Perl вы можете использовать Text :: Balanced , который имеет функцию extract_quotelike, чтобы делать то, что вам нужно.

Вы можете сделать это вручную с помощью:

 /"((?:\\.|.)*?)"/

В основном: начиная с цитаты, если вы видите \, возьмите следующий символ (даже если это цитата), иначе продолжайте, пока не увидите цитату.

0 голосов
/ 20 марта 2010

Это не дает прямого ответа на ваш вопрос, но я предлагаю сначала настроить ваше регулярное выражение быстро , а затем написать код на любом языке, который вы используете.

На этом веб-сайте я всегда работаю над своими регулярными выражениями: www.regexr.com

Это действительно хорошо, потому что это также покажет вам группировки.

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