晚上,在做完祈祷后,我通常会数羊来帮助我入睡。我想要一个正则表达式来帮助我进行正确的计数。我希望以下字符串匹配
0
1sheep
2sheepsheep
3sheepsheepsheep诸若此类。
它的正则表达式是什么?
如果{\1}愿意做我想让它做的事情,就像'(\d+)(sheep){\1}'
如果我成对(1sheepsheep和2sheepsheepsheepsheep)计算绵羊数,那么正则表达式会是什么?
发布于 2010-08-17 16:50:01
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")发布于 2010-08-17 17:16:08
这不是您单独使用正则表达式应该做的事情;您应该首先匹配字符串开头的数字,然后动态生成一个正则表达式来匹配其余部分。有关代码示例,请参阅其他答案。
我相信使用Perl regexes (搜索(?PARNO))可以做到这一点。这可能就是我不喜欢Perl的原因。
发布于 2010-08-17 17:02:40
可以使用正则表达式提取数字,然后在重复运算符上使用该数字编译第二个正则表达式:
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) + '}$')https://stackoverflow.com/questions/3500753
复制相似问题