如何用正则表达式负向预查排除单词?匹配非Sold状态车辆
匹配非sold状态的car并捕获状态的正则方案
你的原正则car(?!\s+sold)的问题在于:它只是做了一个“紧邻位置的负向预查”,仅检查car后面是否直接跟着\s+sold,既没法捕获状态信息,也不能确保后续的整个状态都不是sold,更没限定只匹配整行的有效内容。
要实现匹配所有状态不为sold的car并捕获对应状态,用下面的正则就能解决:
r"^\d+\s+car\s+(?!sold)(.+)$"
正则拆解
^:锚定行开头,避免匹配文本中零散的car\d+\s+:匹配行首的序号和后续空格car\s+:匹配目标关键词car和它后面的空格(?!sold):负向预查,确保接下来的内容不是sold(零宽度断言,不消耗字符)(.+)$:捕获从预查位置到行尾的所有内容,也就是我们需要的状态信息
匹配效果
用这个正则处理你的车辆列表,会精准匹配第2行和第4行,捕获的状态分别是not sold和Repair,完全符合你的需求。
如果不需要匹配序号,只关注car和状态,可以简化成:
r"car\s+(?!sold)(.+)$"
内容的提问来源于stack exchange,提问作者Killer Bean
相关产品推荐
相关产品推荐

