我怎样才能解决这个负面的前瞻性问题以使其发挥作用

How can I fix this negative lookahead to make it work

我有一个字符串例如如下:

ABCD17; ABC18; ABCEF19; XYZ19; ABCDE

在 MusicBee 应用程序中,我尝试使用正则表达式替换函数将匹配项替换为空白,从而将上述字符串转换为

ABCEF19; XYZ19

即仅保留以“19”结尾的项目

元素可以是任意长度,它们可以以数字结尾,也可以不以数字结尾。

以下表达式正确匹配以 19 结尾的项目 [^|;].*(?=19).{3}

但是,我显然需要相反的东西(因为匹配的项目然后被空字符串替换)这不是(令我惊讶的是)

[^|;].*(?!19).{3}

如果您只想保留以 19 结尾的项目,一种选择可能是使用单词边界 \b 并开始匹配 1 个以上的大写字符 A-Z。

可选地匹配末尾的数字,当它不是 19 时使用负先行 (?!19\b)

\b[A-Z]+(?!19\b)\d*\b;?
  • \b字边界
  • [A-Z]+ 匹配 1+ 个大写字符 A-Z(或使用 [^\W\d] 匹配没有数字的单词字符)
  • (?!19\b)负前瞻,断言直接右边的不是19
  • \d* 匹配 0+ 个数字
  • \b;? 字边界和可选匹配 ;

Regex demo