Регулярное выражение механизма приложений Google - PullRequest
1 голос
/ 28 октября 2010

Я работаю над проектом Google appengine, и я столкнулся с затруднением.Следующее должно (если регулярные выражения нормальны) перенаправить все, что не содержит слова «test», в класс MainPage, а остальное в класс TestPage.

application = webapp.WSGIApplication(
                                     [
                                        ('[^(test)]*', MainPage),
                                        ('.+', TestPage)
                                     ],
                                     debug=True)

Вместо этого я нахожу, что обычныйвыражение интерпретируется:

('[^tes]*', MainPage)

Это означает, что все, что включает в себя, e или s, НЕ будет направлено на MainPage (в этом случае оно будет направлено на TestPage).Очевидно, что обходной путь - переписать регулярное выражение TestPage, но я не хочу обходить стороной.Это должно работать без переписывания.

Я где-то пропустил какую-то библиотеку?Это проблема конфигурации?У меня гораздо меньше проблем с вызовом функции или установкой свойства перед запуском run_wsgi_app, но это выглядит противоречивым как есть.

ОБНОВЛЕНИЕ

Оказывается, виновником были две вещи.Сначала это была ошибка с моей стороны в синтаксисе (Mea culpa).Во-вторых, инструмент, который я использовал для подтверждения регулярного выражения, сказал, что выражение не будет соответствовать «test», но оно будет соответствовать «tst».

Ответы [ 3 ]

7 голосов
/ 28 октября 2010

На самом деле, оно интерпретируется как идентичное любой перестановке символов кроме ведущей каретки в квадратных скобках, такой как [^est()].В стандартном синтаксисе регулярных выражений нет простого способа указать дополнение языка, соответствующего определенному регулярному выражению.

В этом случае вам не нужно беспокоиться об этом.Следуйте советам Эрика Норена и измените порядок соответствующих выражений следующим образом:

application = webapp.WSGIApplication(
                                     [
                                        ('test', TestPage)
                                        ('.+', MainPage),
                                     ],
                                     debug=True)

Это однозначно дает тот же результат.

3 голосов
/ 28 октября 2010

Обозначение в квадратных скобках в регулярном выражении представляет собой набор символов, и у паренов нет особого значения внутри них.Поэтому [^(test)] соответствует любому символу, кроме 't', 'e', ​​'s', '(' или ')'

3 голосов
/ 28 октября 2010

Почему бы просто не перевернуть его?Вместо проверки на «не тест» проверка на тест проще.Маршрут, соответствующий TestPage, а остальные - MainPage.

Разница (не работает):

'[^(test)]*'

и

'test'

Если я полностью не ошибаюсь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...