既然已经晚了,我就咬人。
下面的解决方案是hacky,它依赖于将复数形式转换为可以计算的python代码(基本上是转换x?y:z语句转换为python x和y或z等效语句,并将&&/更改为和/或)
我不确定你的复数形式规则是否是一个人为的例子,我也不明白你对第一个文本字段的意思,但我相信你会理解我的示例解决方案:
# -*- Mode: Python -*-
# vi:si:et:sw=4:sts=4:ts=4
p = "Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
# extract rule
import re
matcher = re.compile('plural=(.*);')
match = matcher.search(p)
rule = match.expand("\\1")
# convert rule to python syntax
oldrule = None
while oldrule != rule:
oldrule = rule
rule = re.sub('(.*)\?(.*):(.*)', r'(\1) and (\2) or (\3)', oldrule)
rule = re.sub('&&', 'and', rule)
rule = re.sub('\|\|', 'or', rule)
for n in range(40):
code = "n = %d" % n
print n, eval(rule)