Альтернативы для регулярных выражений в Python - PullRequest
16 голосов
/ 16 июля 2011

Регулярные выражения крайне нечитаемы и их трудно отлаживать. Существует ли какая-либо замена для обработки текста, которая могла бы быть обработана простыми смертными?

Критерии включают

  • Это библиотека или инструмент (пожалуйста, укажите ответ самой библиотеке)

  • Считываемый человеком синтаксис (не требуются читы)

  • Документация с примерами

  • Возможность отладки выражений

Если возможно, можете ли вы упомянуть языковые и независимые от языка решения. Я в основном занимаюсь разработкой на Python, но я надеюсь увидеть библиотеку, которая может быть перенесена на другие языки / платформы.

Однажды я прочитал, что у Haskell будут отличные возможности обработки текста, но опять же, это решение на встроенном языке, а не универсальное решение.

Редактировать: Пожалуйста, не давайте ответов "регулярные выражения - это не плохо, делайте так!" Stackoverflow.com не место для субъективных мнений, но я думаю, что регулярные выражения плохие, и я хочу увидеть альтернативные варианты их использования.

Ответы [ 6 ]

8 голосов
/ 06 августа 2013

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

Intro: http://thechangelog.com/stop-writing-regular-expressions-express-them-with-verbal-expressions/ Python fork: https://github.com/VerbalExpressions

6 голосов
/ 16 июля 2011

pyparsing предлагает другой метод для создания и выполнения (простых) грамматик. Я использовал его в проекте для анализа различных типов файлов журналов, и его использование было довольно простым и несколько более интуитивным, чем с регулярными выражениями.

5 голосов
/ 16 июля 2011

вы можете использовать флаг re.VERBOSE:

charref = re.compile(r"""
 &[#]                # Start of a numeric entity reference
 (
     0[0-7]+         # Octal form
   | [0-9]+          # Decimal form
   | x[0-9a-fA-F]+   # Hexadecimal form
 )
 ;                   # Trailing semicolon
""", re.VERBOSE)
4 голосов
/ 18 июля 2011

Взгляните на список Неда Батчелдера инструментов разбора Python

1 голос
/ 13 сентября 2018

Если вы обеспокоены пониманием и отладкой регулярных выражений других, существуют переводческие инструменты, которые делают их более понятными. Мой любимый это RegExBuddy на Windows. На Mac полезен RegExRx в AppStore.

1 голос
/ 16 июля 2011

LPeg - это библиотека Lua, а не Python, я боюсь, но она могла быть кем-то портирована. В любом случае, это с открытым исходным кодом, так что вы можете перенести его, если хотите. У него несколько иной подход к сопоставлению текста, чем у регулярных выражений, и поэтому я считаю, что он имеет значительную кривую обучения. Однако в том, что касается эффективности, он может превзойти регулярные выражения - но, очевидно, такое утверждение сильно зависит от тестового примера и его возможностей в обоих языках.

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