首页 > 解决方案 > 正则表达式模式强制匹配条件而不是另一个条件

问题描述

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

输入:

ME001000 RV 2 B <- 需要匹配

ME001000 G 10 B <- 需要匹配

ME001000 RE 321 B <- 需要匹配

MP260000 EQTE 1 A <- 需要匹配

EL008002P TR 06 A 1 <- 不需要匹配,因为在字符串的中间

正则表达式模式:([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. Part: ([0-9]{1} [A-Z]{1}|[0-9]{2} [A-Z]{1}|[0-9]{3} [A-Z]{1}): 匹配正确,但也与“06 A”(最后一个字符串的中间)匹配

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

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

标签: regexstringmatchregex-negation

解决方案


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

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

见正则表达式演示

  1. \d{1,3}匹配 1 到 3 位数字
  2. 匹配单个空格。
  3. [A-Z]匹配大写字母。
  4. $匹配字符串的结尾。

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

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

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

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

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


推荐阅读