1

我有一个相对简单的问题,但把我带到了墙上。我想让一个正则表达式在 VBA (VBScript_RegExp_5.5) 中执行以下任务。

给定这样的字符串:

"PrivateFactoryAsclsFactoryPrivateFactoryAsclsFactory"

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

"Private_AsclsFactoryPrivate_AsclsFactory"

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

4

1 回答 1

2

实际上,您可以使用 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, "$1_")
End With

输出:

Private_AsclsFactoryPrivate_AsclsFactory
于 2015-08-06T01:24:45.843 回答