正则表达式 - 条件 Lookbehind,过滤器启动?

Regular expression - Conditional Lookbehind, filter start?

我正在尝试对字符串进行一些检查,在该字符串中,我使用正则表达式使用后视和先行来检索一段文本的特定部分。文本的典型格式如下:

BS-123456.v2019

我使用以下正则表达式检索的文本部分是 123456:

(?<=\-)(.*?)(?=\.v)

基本上我总是想检索连字符“-”和“.v”部分之间的文本部分。

这很好用。

不过,我需要进行调整以过滤掉任何以单词 'Copy' 开头的内容,忽略大小写。例如,如果我有以下文本:

Copy_BS-123456.v2019

或复制-BS-123456.v2019

或复制 BS-123456.v2019

等等正则表达式必须 return 没有。

我尝试了一些类似

的方法
^(?!Copy)(?<=\-)(.*?)(?=\.v)

不过好像不行。 我对正则表达式比较陌生,所以如果我遗漏了一些明显的东西,请原谅。任何建议或正确方向的观点将不胜感激。

模式的这部分 (?!Copy) 会成功,但是在它之后直接使用正后向 (?<=-) 将不会获得匹配,因为正先行将在字符串开始后直接断言左边的应该是 -

您可以改用捕获组:

^(?!Copy).*?-(\d{6})\.v

Regex demo

如果数字前只有一个 -,您还可以使用否定字符 class [^ 匹配除 - 以外的任何字符或换行符。

^(?!Copy)[^-\r\n]*-(\d{6})\.v

Regex demo

请注意 在您的初始模式中,只有在使用环视 (?<=\-).*?(?=\.v)

时才能省略捕获组以获得匹配