我正在尝试对使用正则表达式的字符串进行一些检查,其中使用正则表达式,并且使用lookbehind和lookahead来检索文本的特定部分。文本的典型格式如下:
BS-123456.v2019
我使用以下正则表达式检索的文本部分为123456:
(?<=\-)(.*?)(?=\.v)
基本上,我总是想检索连字符'-'和'.v'部分之间的文本部分。
这很好。
但是,我需要进行调整以滤除以'Copy'开头的所有内容,忽略大小写。例如,如果我有以下文本:
Copy_BS-123456.v2019
或Copy-BS-123456.v2019
或复制BS-123456.v2019
等等正则表达式必须不返回任何内容。
我尝试过类似的方法
^(?!Copy)(?<=\-)(.*?)(?=\.v)
但是它似乎不起作用。我是regex的新手,所以如果我缺少明显的东西,请原谅。任何建议或正确方向的观点将不胜感激。
模式的此部分(?!Copy)
将成功,但是直接在其后使用正向后视(?<=-)
将不会获得匹配,因为正向前瞻将在字符串开始后立即断言左侧应为[-
您可以改用捕获组:
^(?!Copy).*?-(\d{6})\.v
如果数字前只有一个-
,您还可以使用一个否定的字符类[^
来匹配除-
或换行符以外的任何字符。
^(?!Copy)[^-\r\n]*-(\d{6})\.v
注意在您的初始模式中,仅当使用环视条件(?<=\-).*?(?=\.v)
]时,才可以省略捕获组以获取匹配项