正则表达式模式强制匹配条件而不是另一个条件

Regex pattern force match with condition and not for another condition

我试图强制匹配这些条件:

输入:

ME001000 RV 2 B <- 需要匹配

ME001000 G 10 B <- 需要匹配

ME001000 RE 321 B <- 需要匹配

MP260000 EQTE 1 A <- 需要匹配

EL008002P TR 06 A 1 <- 需要 NOT 匹配,因为在字符串

的中间

正则表达式模式:([0-9]{1} [A-Z]{1}|[0-9]{2} [A-Z]{1}|[0-9]{3} [A-Z]{1})+(?:[0-9]{2} [A-Z]{1}\s)

  1. 部分:([0-9]{1} [A-Z]{1}|[0-9]{2} [A-Z]{1}|[0-9]{3} [A-Z]{1}):匹配正确但也匹配“06 A”(最后一个字符串的中间)

  2. 部分:+(?:[0-9]{2} [A-Z]{1}\s):为了强制非匹配

我需要做什么来强制不匹配?

试试这个:

\d{1,3} [A-Za-z]$
  • \d = 任意数字
  • {1,3} = 重复匹配 1 到 3 次
  • </code> = 文字 space </li> <li><code>[A-Za-z] = 任何大写或小写字母
  • $ = 断言字符串结束

您要使用的正则表达式是:

\d{1,3} [A-Z]$

See Regex Demo

  1. \d{1,3} 匹配 1 到 3 位数字
  2. </code> 匹配单个 space.</li> <li><code>[A-Z] 匹配大写字母。
  3. $ 匹配字符串结尾。

您最需要的是 $ 锚点 以确保您要查找的内容位于字符串的末尾。

正则表达式演示使用 JavaScript 规范(您没有指定您使用的语言)并使用标志 gmg 标志用于查找多个匹配项,m 标志用于 $ 锚点匹配行尾和字符串尾。

正如 ggorlen 所指出的,您可能需要考虑稍作修改:

\b\d{1,3} [A-Z]$

以上确保您尝试匹配的模式的第一个数字从单词边界开始(即,它前面是非单词字符或字符串开头)。