Python中的嵌套正则表达式
在Perl中,我可以这样做:
$number = qr/ zero | one | two | three | four | five | six | seven | eight | nine /ix;
$foo = qr/ quantity: \s* $number /ix;
我实际使用的正则表达式有很多行,它可以匹配两位数和序数(比如“二十二”、“第四十”和“十二”都是完整的匹配),而且我在多个地方使用它。这个表达式编译得很快,但确实不简单。我更喜欢先编译一次,然后再把它添加到其他正则表达式中,Perl是允许这样做的。
在Python中,有没有办法像这样嵌套正则表达式呢?
2 个回答
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)
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']