正则表达式基于单词组合过滤行

时间:2017-05-25 14:38:57

标签: regex expression

我想创建一个正则表达式来根据单词组合过滤行。

在以下示例中,我希望匹配包含wheel的所有行,并忽略其中包含steering的所有行。在下面的示例中,两者都有行。我想跳过使用steeringWheel的行,但选择所有其余部分。

chrysler::plastic::steeringWheel

chrysler::chrome::L_rearWheelCentre

chrysler::chrome::R_rearWheelCentre

如果我执行以下操作

.*(Wheel|^steering).*

它会找到包括steeringWheel在内的行。

3 个答案:

答案 0 :(得分:1)

您需要使用在开头处锚定的负前瞻:

(?i)^(?!.*steering).*(wheel|tyre).*
     ^^^^^^^^^^^^^^

请参阅regex demo

模式匹配:

  • (?i) - 使模式不区分大小写
  • ^ - 字符串开头
  • (?!.*steering) - 如果在任何0+字符之后有steering子字符串,则会导致匹配失败的否定前瞻
  • .* - 在最后一次出现
  • 之前尽可能多的0个字符
  • (wheel|tyre) - wheeltyre
  • .* - 任意0个字符,直到行尾。

答案 1 :(得分:0)

这个正则表达式应该可行。它使用负面的后视,假设转向一词后面会紧跟“轮子”这个词。

.*(?<!steering)Wheel.*

答案 2 :(得分:0)

我不认为你能把它全部写成一个正则表达式。我的理解是正则表达式并不真正支持不匹配单词。负面看起来很好,但它必须紧挨着它,而不仅仅是在线上的某个地方。你想用^做什么是为了像:

这样的角色类
to_a

如果可能的话,这样的事情应该有效:

[^abc0-9] #not a character a,b,c,0..9