Regex 使用VBA正则表达式识别不包含特定单词的字符串

Regex 使用VBA正则表达式识别不包含特定单词的字符串,regex,vba,excel,Regex,Vba,Excel,使用VBA正则表达式,我试图在Excel中查找包含字符串“CK”且不包含字符串“AS”的单元格,但它会一直阻止以A或S开头的任何字符串。我使用以下表达式: pattern1 = "^[^AS](.*)CK(.*)" 我看到过有人建议使用负前瞻,但我所看到的建议表达式(主要用于其他编程语言)中没有一个不适用于VBA Excel 有什么提示吗?如果没有断言,可以这样做(但很难): “想法是它应该包含CK,但不应该像一开始那样包含” ^(?:A[^SC].*CK | AC[^K].*CK | AC

使用VBA正则表达式,我试图在Excel中查找包含字符串“CK”且不包含字符串“AS”的单元格,但它会一直阻止以A或S开头的任何字符串。我使用以下表达式:

pattern1 = "^[^AS](.*)CK(.*)" 
我看到过有人建议使用负前瞻,但我所看到的建议表达式(主要用于其他编程语言)中没有一个不适用于VBA Excel


有什么提示吗?

如果没有断言,可以这样做(但很难):

“想法是它应该包含CK,但不应该像一开始那样包含”

^(?:A[^SC].*CK | AC[^K].*CK | ACK | CK |[^A].*CK.*$

格式化

 ^ 
 (?:
      A [^SC] .* CK 
   |  
      AC [^K] .* CK 
   |  
      ACK 
   |  
      CK
   |  
      [^A] .* CK 
 )
 .* 
 $
 ^   
 (?:
      [^A] 
   |  
      A 
      [^S] 
 )*
 (?:
      ACK
   |  
      CK
 )
 (?:
      [^A] 
   |  
      A 
      (?: [^S] | $ )
 )*
 $

或者,在字符串中的任何位置

^(?:[^A]| A[^S])*(?:ACK | CK)(?:[^A]| A(?:[^S]|$)*$

格式化

 ^ 
 (?:
      A [^SC] .* CK 
   |  
      AC [^K] .* CK 
   |  
      ACK 
   |  
      CK
   |  
      [^A] .* CK 
 )
 .* 
 $
 ^   
 (?:
      [^A] 
   |  
      A 
      [^S] 
 )*
 (?:
      ACK
   |  
      CK
 )
 (?:
      [^A] 
   |  
      A 
      (?: [^S] | $ )
 )*
 $

如果没有断言,可以这样做(但很难):

“想法是它应该包含CK,但不应该像一开始那样包含”

^(?:A[^SC].*CK | AC[^K].*CK | ACK | CK |[^A].*CK.*$

格式化

 ^ 
 (?:
      A [^SC] .* CK 
   |  
      AC [^K] .* CK 
   |  
      ACK 
   |  
      CK
   |  
      [^A] .* CK 
 )
 .* 
 $
 ^   
 (?:
      [^A] 
   |  
      A 
      [^S] 
 )*
 (?:
      ACK
   |  
      CK
 )
 (?:
      [^A] 
   |  
      A 
      (?: [^S] | $ )
 )*
 $

或者,在字符串中的任何位置

^(?:[^A]| A[^S])*(?:ACK | CK)(?:[^A]| A(?:[^S]|$)*$

格式化

 ^ 
 (?:
      A [^SC] .* CK 
   |  
      AC [^K] .* CK 
   |  
      ACK 
   |  
      CK
   |  
      [^A] .* CK 
 )
 .* 
 $
 ^   
 (?:
      [^A] 
   |  
      A 
      [^S] 
 )*
 (?:
      ACK
   |  
      CK
 )
 (?:
      [^A] 
   |  
      A 
      (?: [^S] | $ )
 )*
 $
试试这个模式

^(?!AS).*CK.*
(?!AS)
AS
的一种负前瞻,其中
(?!)
由VBA为负前瞻头提供。请注意,相比之下,VBA不提供lookbehind。阅读更多:

试试这个模式

^(?!AS).*CK.*
(?!AS)
AS
的一种负前瞻,其中
(?!)
由VBA为负前瞻头提供。请注意,相比之下,VBA不提供lookbehind。阅读更多:


如果单元格同时包含
CK
AS
,那么它是否应该匹配?
[^AS]
是一个字符类,意味着不是a或S。其思想是它应该包含CK,但不应该像一开始那样包含。如果单元格同时包含
CK
AS
,那么它是否应该匹配?
[^AS]
是一个字符类,意思不是a或S。其思想是它应该包含CK,但不应该像一开始那样包含CK。