你的典型绵羊在python问题中计算正则表达式

时间:2010-08-17 08:44:47

标签: python regex

晚上,在说完我的祈祷之后,我通常会数羊来帮助我入睡。 我想要一个正则表达式来帮助我正确统计。 我希望以下字符串匹配

0
1sheep
2sheepsheep
3sheepsheepsheep

等等。

这是什么正则表达式?

如果'(\d+)(sheep){\1}'能做我想做的事情,那就像{\1}那样

如果我成对地计算我的羊(1sheepsheep2sheepsheepsheepsheep),那么正则表达式会是什么呢?

3 个答案:

答案 0 :(得分:3)

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")

答案 1 :(得分:2)

这不是你应该单独用正则表达式做的事情;您应首先匹配字符串开头的数字,然后动态生成正则表达式以匹配其余部分。请参阅代码示例的其他答案。

我相信使用Perl regexes(搜索(?PARNO))是可行的。这可能就是我不喜欢Perl的原因。

答案 2 :(得分:1)

您可以使用正则表达式提取数字,然后在重复运算符上使用该数字编译第二个正则表达式:

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) + '}$')