0
1sheep
2sheepsheep
3sheepsheepsheep
等等。
这是什么正则表达式?
如果'(\d+)(sheep){\1}'
能做我想做的事情,那就像{\1}
那样
如果我成对地计算我的羊(1sheepsheep
和2sheepsheepsheepsheep
),那么正则表达式会是什么呢?
答案 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) + '}$')