我花了一个小时试图制作一个更好的正则表达式,但这不是我的一杯茶...我需要一个正则表达式,它将执行以下操作(如果需要可以提供更多):
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
正则表达式匹配至少包含的每一行(引擎&&(speed || spd))
所以我想出了这个:
[e,E]ngine[_]?[s,S]p[e]*d|[a-zA-Z]*[_]*[s,S]p[e]*d[_]?[e,E]ngine
但我觉得它可以改进。我该如何简化它?
答案 0 :(得分:9)
你可以使用预见来简化正则表达式
^(?=.*spe*d)(?=.*engine).*
^
将正则表达式锚定在字符串的开头
(?=.*spe*d)
积极向前看。检查字符串是否包含spe*d
(?=.*engine)
另一个正面的展望。检查字符串是否包含engine
.*
匹配整个字符串
OR
^(?=.*spe*d).*engine.*
放下第二个展望
有关[e,E]ngine[_]?[s,S]p[e]*d|[a-zA-Z]*[_]*[s,S]p[e]*d[_]?[e,E]ngine
[e,E]
字符类中的逗号并不代表e
逗号 E
。您可以将其修改为
[eE]
[_]?
在字符类中添加单个字符没有任何好处。它与_?
i
标志我可以用来在匹配正则表达式时忽略大小写
答案 1 :(得分:0)
因此,如果这个正则表达式的较短版本算作简化,那么它就是我想到的
[E,E] ngine _ [S,S] PE d |?[A-ZA-Z] _ [S,S] PE d _并[e ,E] ngine
VS
[E,E] ngine [] [S,S] P [E] * d?| [A-ZA-Z] * [] * [S,S] p [E ] * d [_] [E,E] ngine