Regex - повторение шаблона группы захвата более понятным способом - PullRequest
0 голосов
/ 17 апреля 2020

Я начинаю изучать регулярные выражения, и у меня возник следующий вопрос. Текст ниже:

00 0-23/2 * *   *   ubuntu  source /home/ubuntu/virtualenv/  .........
10 17 8 1,3,6,12 * ubuntu source /home/ubuntu/virtualenv/   .............
25 6    * * *   root    test -x /usr/sbin/anacron || ( .....................
47 6    * * 7   root    test -x /usr/sbin/anacron || ( ......................
52 6    1 * *   root    test -x /usr/sbin/anacron ||....................

Я использовал это регулярное выражение с пакетом python re:

"[\d\*,/-]+\s{1,}[\d\*,/-]+\s{1,}[\d\*,/-]+\s{1,}[\d\*,/-]+\s{1,}[\d\*,/-]+"

Он возвращает мне первые 5 числовых данных каждой строки. Но нехорошо писать [\d\*,/-]+ 5 раз ...

Я пробовал что-то вроде (([\d\*,/-]+)\s{1,}){5}, (?([\d\*,/-]+)\s{1,}){5} или варианты с нотацией (), намереваясь получить интересующую группу захвата и повторить это.

Мне кажется, что я не понял обозначения или есть другой подходящий синтаксис для решения того, что я хочу решить (избегайте повторения [\d\*,/-]+).

Не могли бы вы помочь? меня?

Спасибо!

1 Ответ

2 голосов
/ 17 апреля 2020

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

(([\d*,/-]+\s+){5})

Использовано что-то вроде Итак:

import re
inputString = ...
expression = re.compile("(([\d*,/-]+\s+){5})")
matches = expression.findall(inputString)
print(matches)

Ссылки, которые могут быть полезны:

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