Regex 使用VBA正则表达式识别不包含特定单词的字符串
使用VBA正则表达式,我试图在Excel中查找包含字符串“CK”且不包含字符串“AS”的单元格,但它会一直阻止以A或S开头的任何字符串。我使用以下表达式: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
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。