Объедините несколько regexes с единственным

В сущности мне существует два различия:

первое о том, что они делают и что они возвращают:

  • определение является ключевым словом, которое ничего не возвращает и создает 'имя' в локальном пространстве имен.

  • лямбда является ключевым словом, которое возвращает функциональный объект и не создает 'имя' в локальном пространстве имен.

Следовательно, если необходимо вызвать функцию, которая берет функциональный объект, единственный способ сделать, это в одной строке кода Python с лямбдой. Нет никакого эквивалента с определением

В некоторых платформах, это на самом деле довольно распространено; например, я использую Скрученный много, и таким образом делание чего-то как [1 117]

d.addCallback(lambda result: setattr(self, _someVariable, result))

довольно распространено, и более кратко с лямбдами.

второе различие о том, что фактической функции позволяют сделать.

  • функция, определяемая А с 'определением' может содержать любой код Python
  • , функция, определяемая А с 'лямбдой' должна оценить к выражению и не может таким образом содержать операторы как печать, импорт, повышение...

, Например,

def p(x): print x

работы как ожидалось, в то время как

lambda x: print x

SyntaxError.

, Конечно, существуют обходные решения - замена print с sys.stdout.write, или import с __import__. Но обычно Вы - более обеспеченное движение с функцией в этом случае.

7
задан Jazz 11 December 2009 в 15:22
поделиться

4 ответа

Вы можете просто объединить регулярные выражения, используя or ( | ) (и якоря для начала / конца строки).

Большинство хороших библиотек регулярных выражений оптимизируют свое конечное состояние автоматы после того, как они построят его из вашего регулярного выражения. PCRE делает это, например.

Этот шаг обычно решает вашу проблему оптимизации, т.е. они применяют большинство преобразований, которые вам придется делать «вручную».

7
ответ дан 7 December 2019 в 03:16
поделиться

Я не могу представить, даже если возможно, что результирующее регулярное выражение будет более эффективным.

0
ответ дан 7 December 2019 в 03:16
поделиться

Теоретически регулярное выражение является (недетерминированным) конечным автоматом; таким образом их можно объединить и свести к минимуму. В качестве отправной точки вы можете взглянуть на и .

Однако помните, что это может быть не самый правильный ответ. Почему вам приходится иметь дело с несколькими тысячами регулярных выражений? Я могу только вообразить черт возьми такой штуки. Возможно, вам стоит подумать о написании синтаксического анализатора и грамматики - это очень легко сделать (а грамматики в любом случае более мощные, чем регулярные выражения).

2
ответ дан 7 December 2019 в 03:16
поделиться

Я очень сомневаюсь в этом на том основании, что любой такой инструмент должен быть очень сложным, чтобы иметь дело со всеми различными способами, которыми можно комбинировать регулярные выражения.

Если бы регулярные выражения у вас относительно просты, например, в ваших примерах, однако, возможно, вам повезет написать свои собственные.

0
ответ дан 7 December 2019 в 03:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: