Python中正则表达式的替代品

Posted

技术标签:

【中文标题】Python中正则表达式的替代品【英文标题】:Alternatives for regex in Python 【发布时间】:2011-10-06 17:20:28 【问题描述】:

正则表达式非常不可读且难以调试。是否存在任何可以由普通人处理的文本处理的替代品?

标准包括

是库还是工具(请将答案指向库本身)

人类可读的语法(无需备忘单)

示例文档

能够调试表达式

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

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

编辑:请不要回答“正则表达式还不错,就这样吧!” ***.com 不是发表主观意见的地方,但我认为正则表达式不好,我想看看我使用它们的替代选项。

【问题讨论】:

请参阅programmers.stackexchange.com/questions/75905/…,了解如果“人类可读语法”位被采用得太远,为什么这可能是一个坏主意。至于文档,有大量关于“常用”正则表达式的文档,即使您认为是这样,您也不需要重新发明技术来编写“更好”的文档。至于调试,有工具可以解决这个问题,举一些例子来说明你的意思。 我寻求替代品,而不是增强我现有的 reg exp 经验 什么的最佳解决方案?正则表达式很少是问题的最佳解决方案,但当它们是时,它们就是。如果没有人为这组问题发明了更好的东西,也许真的没有改进的余地? 我是人,我能读懂正则表达式。正则表达式不是不可读的;只有写得不好的正则表达式才是。 (提示:r"break" + r"the" + r"expression" 分开并逐行注释,就像你对任何其他复杂代码块一样。) 致一些在这里评论“吹嘘”他们如何享受正则表达式的人。你在编写和阅读正则表达式方面获得的熟练程度或练习它的乐趣并不意味着数以百万计的开发人员,更不用说新开发人员,应该使用他们的晦涩语法,它不适合算法构造和操作,并且因其古怪和臭名昭著而臭名昭著。对什么构成词和什么不构成词的封闭式方法。现在是时候继续研究算法、工程设计和可用性设计可以提供的更好的东西了。是的,我也读过正则表达式:) 【参考方案1】:

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

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

【讨论】:

VerbalExpressions 在正则表达式的灵活性限制范围内,在可读性和可组合性方面看起来很棒!但是,我没有注意到它的 api 上是否有任何指示空白字符(?)的东西。它是否简单地将“”解释为任何空白字符?【参考方案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 parsing tools列表

【讨论】:

优秀的来源 - 我正是在寻找这种信息!【参考方案5】:

LPeg 是一个 Lua 库而不是 Python 库,我担心它可能已经被某人移植了。无论哪种方式,它都是开源的,因此您可以根据需要自行移植。它的文本匹配方法与正则表达式有些不同,因此我发现它有相当长的学习曲线。然而,就效率而言,它有可能胜过正则表达式——但显然,这样的语句很大程度上取决于测试用例和两种语言的能力。

【讨论】:

【参考方案6】:

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

【讨论】:

虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接答案可能会失效。 - From Review 感谢您的改进。固定的。有人当然可以在引擎中搜索这些工具。不需要链接。

以上是关于Python中正则表达式的替代品的主要内容,如果未能解决你的问题,请参考以下文章

正则表达式的可变长度lookbehind-assertion替代方案

为啥替代品的顺序在正则表达式中很重要?

python3的正则表达式(regex)

Javascript 替代品中的正则表达式 Lookbehind

替代正则表达式以解析链接的 HTML 页面 [重复]

使用正则表达式替代 HTML 解析