提取不在指定子字符串前面的特定子字符串
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
我有一个相对简单的问题,但让我无所适从。 我想让正则表达式在 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