Ваши типичные овцы, считающие регулярное выражение в вопросе о питоне - PullRequest
4 голосов
/ 17 августа 2010

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

0
1sheep
2sheepsheep
3sheepsheepsheep

и т. д.

каково регулярное выражение для этого?

что-то вроде '(\d+)(sheep){\1}', если {\1} будетделай то, что я хочу, чтобы он делал

что если я посчитаю своих овец парами (1sheepsheep и 2sheepsheepsheepsheep), что будет тогда с регулярным выражением?

Ответы [ 3 ]

3 голосов
/ 17 августа 2010

Механизм регулярных выражений Python не поддерживает синтаксический анализ сопоставленного подвыражения для счетчика повторений, и я не думаю, что это следует делать и с RegExp.

Лучше всего сочетать сопоставление и проверку RegExp с кодом:

rx = re.compile(r'^(\d+)((?:sheep)*)$')
m = rx.match(theString)
if m and len(m.group(2)) == 5 * int(m.group(1)):
   print ("Matched")
2 голосов
/ 17 августа 2010

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

Я полагаю, что это выполнимо, используя регулярные выражения Perl (поиск (?PARNO)).Наверное, поэтому я не люблю Perl.

1 голос
/ 17 августа 2010

Вы можете извлечь цифры с помощью регулярного выражения, а затем скомпилировать второе регулярное выражение, используя это число в операторе повторения:

import re
theString = '2sheepsheep'

rx = re.compile(r'^(\d+)(sheep)*$')
m = rx.match(theString)

rx = re.compile(r'^(\d+)(sheep){' + m.group(1) + '}$')
# If you count in pairs, you can just change that to:
rx = re.compile(r'^(\d+)(sheepsheep){' + m.group(1) + '}$')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...