正则表达式 - 条件 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
如果数字前只有一个 -
,您还可以使用否定字符 class [^
匹配除 -
以外的任何字符或换行符。
^(?!Copy)[^-\r\n]*-(\d{6})\.v
请注意 在您的初始模式中,只有在使用环视 (?<=\-).*?(?=\.v)
时才能省略捕获组以获得匹配
我正在尝试对字符串进行一些检查,在该字符串中,我使用正则表达式使用后视和先行来检索一段文本的特定部分。文本的典型格式如下:
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
如果数字前只有一个 -
,您还可以使用否定字符 class [^
匹配除 -
以外的任何字符或换行符。
^(?!Copy)[^-\r\n]*-(\d{6})\.v
请注意 在您的初始模式中,只有在使用环视 (?<=\-).*?(?=\.v)