Регулярное выражение для выбора среднего слова, разделенного пробелом - PullRequest
1 голос
/ 23 апреля 2020

Я хочу выбрать слово, начинающееся с '/', где-то в строке

Пример

30 8 * * * /root/something > /dev/null 2>&1
30 8 * * * usr/bin/php /home/php/script/run.php

Я хочу соответствовать

/root/something
/home/php/script/run.php

Мое регулярное выражение не работает вообще (с использованием Ansible)

regex_findall('\\s(/.*)')

, и это дает вывод, подобный этому

/root/something > /dev/null 2>&1
/home/php/script/run.php"

1 Ответ

1 голос
/ 23 апреля 2020

Вы можете использовать

r'\s(/\S+).*'

См. Демо regex

Это будет соответствовать пробелу (\s), затем захватит / и затем любые 1+ непробельные символы (\S+) в группу 1, а затем будут соответствовать остальную часть строки (с .*).

Другая идея: сопоставить последовательности / и затем 1+ символы, отличные от /, если не начинаются с /dev/null:

r'(?<!\S)(?!/dev/null)(?:/[^/\s]+)+'

Это будет соответствовать

  • (?<!\S) - пробел или начало строки должны появиться сразу на left
  • (?!/dev/null) - нет /dev/null разрешено сразу справа от текущего местоположения
  • (?:/[^/\s]+)+ - 1 или более вхождений
    • / - / char
    • [^/\s]+ - 1+ символов, отличных от / и пробелов.

См. это демонстрационное выражение regex .

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