【发布时间】:2019-03-21 21:38:04
【问题描述】:
我有以下正则表达式:
(\d+\s+[-]\s+.*?(?=\s+-)|\d+\s+[-].*)
正则表达式将使用此文本
"Option 01 - Random phrase - Top Menu",
"Option 02 - Another Random Phrase - Su Menu",
"Option 03 - More 01 Phrase - Menu",
"Option 04 - More Phrase -",
"Option 05 - Simple Phrase"
保持这样的状态
01 - Random phrase ",
02 - Another Random Phrase ",
03 - More 01 Phrase ",
04 - More Phrase ",
05 - Simple Phrase ",
这个Regex的作用是获取以破折号开头的数字,走在最后一个破折号之前。例如:
- dfhdjfhdjf01 - 文本文本 - dkfdçsjf
当最终没有踪迹时,基本上会发生这种情况:
- dfhdjfhdjf01 - 文本文本 dkfdçsjf
但是,在 regex101.com 上调试此正则表达式会指责您有 63 到 122 个步骤。也就是说,这个正则表达式很慢。
在批评这个问题之前,我已经阅读了正则表达式的所有文档,我想让你知道我指的是特定的术语..一个需要解决的问题。毕竟,网站不就是为了这个吗?
告诉我,我将如何解决这个正则表达式的缓慢问题?
【问题讨论】:
-
你想让正则表达式做什么?
-
我对这个问题的主要批评是,在寻求简化模式的方法之前,您没有具体说明您要做什么或输入的范围是多少。
-
为什么需要简化正则表达式?为什么122步太多了?这真的会给您带来问题吗?
-
除非您解释要匹配的规则,否则我们无法知道它如何“更轻”。没有上下文,唯一的简化可以是删除严格冗余的模式,比如用
-替换[-]。除此之外的任何事情都可能会根据假设删除功能。 -
如果您的正则表达式困扰您,请给 Expresso 一个机会:ultrapico.com/expresso.htm 这是一个免费的桌面工具,可以解释一个人的结构并协助设计和验证解决方案。我的最爱。
标签: regex