在perl中,我可以这样做:
$number = qr/ zero | one | two | three | four | five | six | seven | eight | nine /ix;
$foo = qr/ quantity: \s* $number /ix;
我的实际正则表达式是多行并且是两位数和序数(例如,“二十二”,“四十四”和“十二都是完全匹配”),我在几个地方使用它。表达式编译速度很快,但它肯定是非平凡的。我更喜欢编译一次,然后将其添加到其他正则表达式中,就像Perl允许的那样。
有没有办法在Python中以这种方式嵌套正则表达式?
答案 0 :(得分:6)
在python中,通过将字符串传递给re.compile来构建正则表达式。 您只需执行常规字符串操作即可“嵌套”正则表达式:
#!/usr/bin/env python
import re
number = 'zero | one | two | three | four | five | six | seven | eight | nine'
foo = re.compile(' quantity: \s* (%s) '%number,re.VERBOSE|re.IGNORECASE)
teststr=' quantity: five '
print(foo.findall(teststr))
# ['five']
答案 1 :(得分:1)
这可能不完全相同。但你可以这样做:
import re
number = "(?:zero | one | two | three | four | five | six | seven | eight | nine)"
foo = "quantity: \s* " + number
bar = re.compile(foo, re.I | re.X)