正则表达式-条件回溯,过滤器开始?

问题描述 投票:1回答:1

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

BS-123456.v2019

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

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

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

这很好。

但是,我需要进行调整以滤除以'Copy'开头的所有内容,忽略大小写。例如,如果我有以下文本:

Copy_BS-123456.v2019

或Copy-BS-123456.v2019

或复制BS-123456.v2019

等等正则表达式必须不返回任何内容。

我尝试过类似的方法

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

但是它似乎不起作用。我是regex的新手,所以如果我缺少明显的东西,请原谅。任何建议或正确方向的观点将不胜感激。

regex regex-lookarounds regex-group
1个回答
3
投票

模式的此部分(?!Copy)将成功,但是直接在其后使用正向后视(?<=-)将不会获得匹配,因为正向前瞻将在字符串开始后立即断言左侧应为[-

您可以改用捕获组:

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

Regex demo

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

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

Regex demo

注意在您的初始模式中,仅当使用环视条件(?<=\-).*?(?=\.v)]时,才可以省略捕获组以获取匹配项

© www.soinside.com 2019 - 2024. All rights reserved.