我想创建一个正则表达式来根据单词组合过滤行。
在以下示例中,我希望匹配包含wheel
的所有行,并忽略其中包含steering
的所有行。在下面的示例中,两者都有行。我想跳过使用steeringWheel的行,但选择所有其余部分。
chrysler::plastic::steeringWheel
chrysler::chrome::L_rearWheelCentre
chrysler::chrome::R_rearWheelCentre
如果我执行以下操作
.*(Wheel|^steering).*
它会找到包括steeringWheel在内的行。
答案 0 :(得分:1)
您需要使用在开头处锚定的负前瞻:
(?i)^(?!.*steering).*(wheel|tyre).*
^^^^^^^^^^^^^^
请参阅regex demo。
模式匹配:
(?i)
- 使模式不区分大小写^
- 字符串开头(?!.*steering)
- 如果在任何0+字符之后有steering
子字符串,则会导致匹配失败的否定前瞻.*
- 在最后一次出现(wheel|tyre)
- wheel
或tyre
.*
- 任意0个字符,直到行尾。答案 1 :(得分:0)
这个正则表达式应该可行。它使用负面的后视,假设转向一词后面会紧跟“轮子”这个词。
.*(?<!steering)Wheel.*
答案 2 :(得分:0)
我不认为你能把它全部写成一个正则表达式。我的理解是正则表达式并不真正支持不匹配单词。负面看起来很好,但它必须紧挨着它,而不仅仅是在线上的某个地方。你想用^做什么是为了像:
这样的角色类to_a
如果可能的话,这样的事情应该有效:
[^abc0-9] #not a character a,b,c,0..9