我怎样才能防止我正在寻找的单词重复,无论它们的顺序如何

本文关键字:顺序 单词重 寻找 | 更新日期: 2023-09-27 18:33:17

我花了大约一个小时试图制作一个更好的正则表达式,但这不是我的一杯茶......我需要一个正则表达式来执行以下操作(如果需要,可以提供更多信息):

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

正则表达式应该匹配至少包含(引擎&&(速度||spd))的每行

所以我想出了这个:

[e,E]ngine[_]?[s,S]p[e]*d|[a-zA-Z]*[_]*[s,S]p[e]*d[_]?[e,E]ngine

但我觉得可以改进。如何简化它?

我怎样才能防止我正在寻找的单词重复,无论它们的顺序如何

您可以使用展望来简化正则表达式,例如

^(?=.*spe*d)(?=.*engine).*
  • ^ 将正则表达式锚定在字符串的开头

  • (?=.*spe*d)积极的展望。检查字符串是否包含spe*d

  • (?=.*engine)另一个积极的展望未来。检查字符串是否包含engine

  • .*匹配整个字符串

正则表达式示例

^(?=.*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标志 i 可用于在匹配正则表达式时忽略案例

因此,

如果这个正则表达式的较短版本算作简化,那么这就是我想到的

[e,E]ngine_?[s,S]ped|[a-zA-Z]_[s,S]ped_?[e,E]ngine

[

e,e]ngine[]?[s,S]p[e]*d|[a-zA-Z]*[]*[s,S]p[e]*d[_]?[e,E]ngine