正则表达式删除数字和单词字符串中的最后两个字母

regex to remove last two letters in a number and word string

我试图只匹配少数 ID,其中最后有一个或两个字母

示例:

ny12345d ---待匹配

ny12345dc -- 待匹配

ny12346T01 --不匹配

ny12346dfA --不匹配

ny12345 ------不匹配

到目前为止我想到了这个

/[^0-9]*$/g

你可以使用

(?<![a-zA-Z])[a-zA-Z]{1,2}$

regex demo

详情:

  • (?<![a-zA-Z]) - 如果当前位置的左侧紧邻 ASCII 字母,则匹配失败的负面回顾
  • [a-zA-Z]{1,2} -
  • 处的一个或两个 ASCII 字母
  • $ - 字符串结尾。

捕获组方法:

(?:[^a-zA-Z]|^)([a-zA-Z]{1,2})$

参见 this regex demo。这里,(?:[^a-zA-Z]|^) 是一个非捕获组,匹配 ASCII 字母以外的字符或字符串的开头,([a-zA-Z]{1,2})$ 类似于上述模式,将字母捕获到第 1 组中。

注意:如果要确保最后一两个字母前有数字,需要

(?<=\d)[a-zA-Z]{1,2}$
(?<=[0-9])[a-zA-Z]{1,2}$
\d([a-zA-Z]{1,2})$
[0-9]([a-zA-Z]{1,2})$

此处,\d[0-9] 匹配任何数字,而 (?<=\d) 是一个 positive lookbehind,需要一个数字立即出现在当前位置左侧。

能否请您尝试以下。在线正则表达式演示是:Online regex demo

[^a-zA-Z][a-zA-Z]{1,2}$

解释: 只需检查行的最后是否有除字母以外的任何内容,后跟 1 或 2 个字母,然后匹配该字符串.