首页 > 解决方案 > 将匹配不以“km”结尾的字母和数字组合的正则表达式

问题描述

我是新来的,所以我会尽力而为。

我有一行包含不同汽车信息的文本。

65101km,轿车,手动,18131A,FWD,二手,5.5L/100km,丰田,凯美瑞,SE,{AC,加热座椅,加热后视镜,无钥匙进入},2010

我正在尝试编写一个正则表达式,它将匹配该行中不以“km”结尾的字母和数字的组合。汽车的序列号可能因一家汽车制造商而异。例如:

18FO724A、18131A、19BF723A

这些是来自不同车型的不同序列号。

我试过这个:

/((?:[a-zA-Z]+[0-9]+[^km]$|[0-9]+[a-zA-Z])[a-zA-Z0-9])/

但它不断返回 # 公里

65101公里

而我需要的答案是

18131A

任何帮助都可以。谢谢

标签: rubyregex

解决方案


从您提供的示例中,您的序列号似乎将始终以数字开头并以字母结尾 - 如果这不是真的,请参阅我的评论并阅读将采取哪些措施来更好地帮助您。

这种模式应该有效:

/(\d+[a-z0-9]+[a-z](?<!km\b))(?:,|$)/i

这需要以下条件:

  • \d+以至少一位或+多位数字开头\d
  • [a-z0-9]+后跟任何字母数字字符[a-z0-9],一次或多次+
  • (?<!km\b))(?:,|$)断言字符串以逗号,或字符串结尾结尾的负前瞻$,但如果它出现在字母 km 之后,则不是(?<!km\b)

这使用单个捕获组(...),因此您不包括,整个匹配项附带的逗号

regex101上查看


推荐阅读