Python中正则表达式的替代品

时间:2011-07-16 11:42:24

标签: python regex text full-text-search

正则表达式非常难以理解且难以调试。是否存在可以由凡人处理的文本处理的替代品?

标准包括

  • 这是一个图书馆或工具(请指出图书馆本身的答案)

  • 人类可读的语法(不需要备忘单)

  • 带示例的文档

  • 能够调试表达式

如果可能,您可以提及特定于语言和语言的解决方案。我主要是在Python上开发,但我希望看到一个可以移植到其他语言/平台的库。

我曾经读过Haskell会有很好的文本处理功能,但同样,这是一个内置的语言解决方案,而不是通用的解决方案。

编辑:请不要给出答案“正则表达式也不错,请这样做!” Stackoverflow.com不是一个主观意见的地方,但我认为正则表达式很糟糕,我想看看我使用它们的替代选项。

6 个答案:

答案 0 :(得分:8)

我知道这篇文章很老,但人们可能会从这个问题/答案中受益。 VerbalExpressions仍在幕后使用正则表达式,但是以友好的方式。

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

答案 1 :(得分:6)

pyparsing提供了另一种创建和执行(简单)语法的方法。我一直在一个项目中使用它来解析不同类型的日志文件,并且使用起来比使用正则表达式更简单,更直观。

答案 2 :(得分:5)

你可以使用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)

答案 3 :(得分:4)

看看Ned Batchelder的python parsing tools

列表

答案 4 :(得分:1)

LPeg是一个Lua库而不是Python,我担心,但它可能已被某人移植过。无论哪种方式,它都是开源的,所以如果你想要自己可以移植它。文本匹配的方法与正则表达式有所不同,因此我发现它具有相当大的学习曲线。但是,在效率方面,它有可能胜过正则表达式 - 但显然,这样的陈述在很大程度上取决于两种语言中的测试用例和能力。

答案 5 :(得分:1)

如果您担心了解和调试其他人的正则表达式,可以使用一些翻译工具来使其更容易理解。我最喜欢的是Windows上的RegExBuddy。在Mac上,AppStore中的RegExRx很有帮助。