提取不在指定子字符串前面的特定子字符串

Extract specific substring which not preceding with specified substring

我有一个相对简单的问题,但让我无所适从。 我想让正则表达式在 VBA (VBScript_RegExp_5.5).

中执行以下任务

给定一个这样的字符串:

"PrivateFactoryAsclsFactoryPrivateFactoryAsclsFactory"

我只想删除前面没有 "cls""Factory"。对于这种特殊情况,如果所有匹配项都正确替换为 "_",结果将如下所示:

"Private_AsclsFactoryPrivate_AsclsFactory"

当然,像 "clsFactory|(Factory)" 这样的简单排除技巧在 VBA 中不起作用,look-behinds 也不起作用。

您实际上可以使用 VBScript Regex 库进行一些 hack 的负面回顾。以下模式匹配任何两个或更少的字符 任何三个不是 "cls" 的字符(使用否定先行),后跟 "Factory".

Const strText As String = "PrivateFactoryAsclsFactoryPrivateFactoryAsclsFactory"

With CreateObject("VBScript.RegExp")
    .Pattern = "(^.{0,2}|(?!cls).{3})Factory"
    .Global = True
    Debug.Print .Replace(strText, "_")
End With

输出:

Private_AsclsFactoryPrivate_AsclsFactory