实际引用:“他们花了很多时间维护正则表达式。那么,正则表达式地狱的替代方案是什么?”
正则表达式地狱?是一回事?
我有几个想法:
- 你有支持“很多”的指标吗?我对此表示怀疑。很难将 RE 维护与代码维护分开。除非你有 RE 专家。也许有一个与 DBA 组织类似的 RE 组织。 DBA 编写SQL。 RE 专家撰写 RE。如果那是真的,我可以看到你会有指标,并且可以证明“很多”。否则,我怀疑这是夸张的。有挫败感,真的。
- RE 对编程至关重要。很难表达它们的重要性。我建议那些在 RE 方面有严重问题的程序员在工艺的其他方面也有严重问题,并且可能需要在 RE(和其他方面)方面进行补救培训。接受一些培训并不丢人。有很多书可以提供帮助。声称没有时间进行培训(或没有预算)是创建 RE Hell 的初衷。这是一个需要解决的小问题。你可以花 16 个小时四处摸索,或者停止摸索,花 16 个小时学习,然后继续学习新技能。这是你的选择。
- RE 只是传统集合论的一种变体。他们一点都不难。集合论对编程至关重要,RE 也是如此。它和布尔代数一样基础。它与让循环正确终止一样基本。它与从终端窗口复制和粘贴一样基本。
- RE 是通用的,因为它们比任何其他技术都能更好地解决许多问题。强调优于任何替代方案。 RE 融入了 awk 和 perl 等语言的语法中。它们是通用的,因为从来没有人构建过合理的替代方案。如果您想了解更多内置正则表达式的优势,请学习 SNOBOL4 。
RE 是必不可少的。未能掌握 RE 意味着未能学习基础知识。
RE 地狱就像布尔代数地狱。这就像集合论地狱。这就像数学图书馆地狱。这就像未初始化的变量地狱。这些是你通过一种有意的无知创造出来的东西。
我很抱歉听起来很刺耳。但我没有同情心。
有问题的初始正则表达式? r"[\( | \$ | \/ |]"。这表明对基础知识缺乏一定的了解。看起来它以 r"\(|\$|/" 开头,有人在空格中输入(也许他们打算在编译时使用详细选项)和/或将整个包裹在 [] 中。在尝试 [] 之后,它似乎可以工作,他们称之为完成。
该电子邮件询问(有点琐碎)最后一个管道是否真的是无关紧要的。嗯。是的。但。
跟进
困难的部分是(1)试图弄清楚问题到底是什么。为什么他们只删除最后一个竖线字符?他们想做什么?目标是什么?然后(2)试图弄清楚需要多少教程背景才能成功回答真正被问到的任何问题。 r[\(\$/]" 的响应似乎实际上可能没有 帮助 。扮演发出神秘答案的神奇神谕只会使混乱的统治状态永久化。
后续的澄清请求导致 (1) 一份详尽的清单,列出了似乎提到正则表达式的每本书,(2) 一个远高于正则表达式问题上下文的用户故事。当没有焦点时,很难提供帮助。每本书。 “数据”的广义“匹配”。
Python连接?也不能完全解析出来,这似乎是 ETL 管道的一部分。我不能确定,因为最初的用户故事毫无意义。
尝试讨论所提供的关于“匹配”和“数据”的用户故事——可以预见——毫无结果。它停在“一些问题......不仅仅是拼写错误和拼写错误。”等待。什么?那他们是什么?如果它们不是拼写错误,那它们是什么?欺诈罪?黑客攻击?通过在某些匹配算法中占用时间来进行拒绝服务攻击?
这是一个拼写错误。不可能是别的。以其他方式结束对话是一种奇怪且弄巧成拙的重新设计软件的方法。
更多后续
在这一点上,我们似乎正在将讨论范围缩小到“随着时间的推移,我们已经积累了很多‘标准 错误 ’。需要帮助的问题是如何管理所有代码这些‘常见错误’?”提供此问题是为了代替实际的用户故事。缺少故事可能意味着我们对实际解决数据匹配问题不感兴趣。相反,我们狭隘地专注于在正则表达式上撒上 Faerie Dust,使它们表现得更好。
他们不想要正则表达式的 替代品 ,因为问题“不仅仅是错别字和拼写错误”。他们想要没有正则表达式地狱的正则表达式。