Python中的嵌套正则表达式

2 投票
2 回答
7090 浏览
提问于 2025-04-15 17:08

在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']

撰写回答