【发布时间】:2015-02-03 10:47:33
【问题描述】:
我已经花了大约一个小时来尝试制作更好的正则表达式,但这不是我的一杯茶...我需要一个正则表达式,它将执行以下操作(如果需要,可以提供更多):
Spd_Engine #Ok
speedengine #Ok
enginespd #Ok
Engine_speed #Ok
aps_speed_engine #Ok
engine_speed #Ok
engine_trq #Not Ok
speed_rpm #Not Ok
正则表达式应该匹配至少包含 (engine && (speed || spd)) 的每一行
所以我想出了这个:
[e,E]ngine[_]?[s,S]p[e]*d|[a-zA-Z]*[_]*[s,S]p[e]*d[_]?[e,E]ngine
但我觉得它可以改进。如何简化?
【问题讨论】:
-
为方便起见,您能否编辑您的问题,并用文字说明您的验证检查是什么?为什么 aps_speed_engine 可以接受,而 engine_trq 不可以,这并不明显。
-
在字符类中你不需要使用逗号,
[eE]是正确的格式。但是你可以使用i标志来忽略大小写检查 -
这不是代码审查。 “改进”是基于意见的。 RegEx 是多余的,
input = input.ToLower(); if ((input.Contains("speed") || input.Contains("spd") && input.Contains("engine")) { ... }会做同样的事情并且更具可读性。 -
@nu11p01n73R 我没能使用regex hero找到
i标志的正确语法 -
您可以先问一个更具体的问题。 “我觉得”和“简化”不是很真实。 “如何防止重复我正在寻找的单词而不管它们的顺序?” 是一个更精确的问题。