我该如何解决此负面的前瞻使其发挥作用

时间:2019-10-26 13:31:32

标签: regex regex-lookarounds

我有一个字符串,如下所示:

ABCD17; ABC18; ABCEF19; XYZ19; ABCDE

在MusicBee应用程序中,我尝试使用Regex替换功能将MATCHED项交换为空白,从而将上述字符串转换为

ABCEF19; XYZ19

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

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

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

但是,我显然需要与此相反(因为匹配的项然后被替换为空字符串),这不是(对我来说令人惊讶)

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

1 个答案:

答案 0 :(得分:1)

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

使用负前瞻(?!19\b)

可选地匹配不等于19的末尾数字。

\b[A-Z]+(?!19\b)\d*\b;?
  • \b字边界
  • [A-Z]+匹配1个以上大写字符A-Z(或使用[^\W\d]匹配不带数字的单词字符)
  • (?!19\b)负向前进,断言右边的不是19
  • \d*匹配0+个数字
  • \b;?字边界,并可选地匹配;

Regex demo