我怎样才能解决这个负面的前瞻性问题以使其发挥作用
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;?
字边界和可选匹配 ;
我有一个字符串例如如下:
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;?
字边界和可选匹配;