вложенные регулярные выражения в python - PullRequest
2 голосов
/ 17 декабря 2009

В Perl я могу сделать это:

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

Мое действительное регулярное выражение состоит из множества строк и содержит двузначные и порядковые номера (например, «двадцать два», «сорок четвертый» и «двенадцать - все полные совпадения), и я использую его в нескольких местах. Выражение компилируется быстро, но это, конечно, нетривиально. Я предпочитаю скомпилировать его один раз, а затем добавить его в другие регулярные выражения, как позволяет Perl.

Есть ли способ вложить регулярные выражения таким образом в Python?

Ответы [ 2 ]

6 голосов
/ 17 декабря 2009

В 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 голос
/ 17 декабря 2009

Это, вероятно, не совсем то же самое. Но вы могли бы сделать это:

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)
...