python中嵌套的正则表达式

时间:2009-12-17 14:49:17

标签: python nested expression

在perl中,我可以这样做:

$number = qr/ zero | one | two | three | four | five | six | seven | eight | nine /ix;
$foo = qr/ quantity: \s* $number /ix;

我的实际正则表达式是多行并且是两位数和序数(例如,“二十二”,“四十四”和“十二都是完全匹配”),我在几个地方使用它。表达式编译速度很快,但它肯定是非平凡的。我更喜欢编译一次,然后将其添加到其他正则表达式中,就像Perl允许的那样。

有没有办法在Python中以这种方式嵌套正则表达式?

2 个答案:

答案 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)