【问题标题】:nested regular expressions in pythonpython中的嵌套正则表达式
【发布时间】:2009-12-17 23:06:04
【问题描述】:
在 perl 中我可以这样做:
$number = qr/ zero | one | two | three | four | five | six | seven | eight | nine /ix;
$foo = qr/ quantity: \s* $number /ix;
我的实际正则表达式有很多行,并且包含两位数和序数(例如,“二十二”、“四十四”和“十二”都是完全匹配的),我在几个地方使用它。这个表达式编译速度很快,但它肯定不是微不足道的。我更喜欢编译一次,然后将它添加到其他正则表达式中,因为 Perl 允许。
有没有办法在 Python 中以这种方式嵌套正则表达式?
【问题讨论】:
标签:
python
nested
expression
【解决方案1】:
在 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']
【解决方案2】:
这可能不太一样。但你可以这样做:
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)