Альтернативы регулярного выражения в Python
Регулярные выражения очень нечитаемы и трудно отлаживаются. Существует ли какая-либо замена для обработки текста, которую могут обрабатывать простые смертные?
Критерии включают
-
Это библиотека или инструмент (укажите ответ на самую библиотеку)
-
Синтаксис, читаемый человеком (нет необходимости в читах)
-
Документация с примерами
-
Возможность отладки выражений
Если возможно, вы можете указать языковые и языковые независимые решения. Я в основном развиваюсь на Python, но я надеюсь увидеть библиотеку, которую можно портировать на другие языки/платформы.
Я однажды прочитал, что у Haskell будут хорошие возможности обработки текста, но опять же это встроенное языковое решение, а не универсальное решение.
Изменить: Пожалуйста, не давайте ответов: "Регулярные выражения неплохие, делайте это!" Stackoverflow.com - это не место для субъективных мнений, но я думаю, что регулярные выражения плохие, и я хочу увидеть мои альтернативные варианты их использования.
Ответы
Ответ 1
Я знаю, что это сообщение было старым, но люди могут извлечь выгоду из этого вопроса/ответов. VerbalExpressions по-прежнему использует regex позади сцены, но дружелюбно.
Вступление: http://thechangelog.com/stop-writing-regular-expressions-express-them-with-verbal-expressions/
Вилка Python: https://github.com/VerbalExpressions
Ответ 2
pyparsing предлагает другой способ создания и выполнения (простых) грамматик. Я использовал его в проекте для разбора различных файлов журналов, и использование было довольно простым и несколько более интуитивным, чем с регулярными выражениями.
Ответ 3
вы можете использовать флаг 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
Взгляните на список Ned Batchelder инструменты анализа python
Ответ 5
LPeg - это библиотека Lua, а не Python, которую я боюсь, но она могла быть перенесена кем-то. В любом случае, это open-source, поэтому вы можете перенести его, если хотите. Он имеет несколько иной подход к сопоставлению текста, чем регулярные выражения, и, как таковой, я нахожу, что он имеет значительную кривую обучения. Однако, когда эффективность связана с тем, что у него есть потенциал для вытеснения регулярных выражений, - но, очевидно, такое утверждение сильно зависит от тестовой и одной способности на обоих языках.