是否可以迭代VBA RegEx
匹配并替换为ID值给出的特定数据?
如,
<a id="a-UP:124" {REPLACEITEMHERE}
.../a>
我的模式是这样的:
<a id="a-([\w\d]+:[\w\d]+)" ({REPLACEITEMHERE})
所以我有多个“替换项目”,每个“替换项目”都是UP:124
的唯一值。
这可能在VBA RegEx
吗?在我经历一个更繁琐的过程之前,我只是想知道!谢谢!
UPDATE(根据评论者的要求提供更多详细信息 - 希望这能让我更清楚我正在寻找的内容!我了解如何创建模式,它更多地迭代结果,然后执行替换每个人都发现我遇到了麻烦。谢谢!):
这是我正在使用的RegEx模式:
<a id="a-([\w\d]+:[\w\d]+)"[^{]+({FILE})[^{]+({PERCENT})[^{]+({COLOR})
设置为:
.Global = True
.IgnoreCase = True
.MultiLine = False
我想要的替换模式是检查第一个捕获组$1
的值是什么,然后替换值{FILE}
{PERCENT}
{COLOR}
(组{{ 1}},$2
和$3
)以及我存储在类中的相应值。
$4
答案 0 :(得分:3)
我认为你可以做一些像这个简化的例子(假设您输入的字符串很难设置为测试)
Global
转为False
,为每次替换使用一个Regexp
(另一种方法是使用Global = True
,然后针对不同的第一个Regexps
运行匹配)Do
循环来测试有效的Regexp
是否仍然存在submatch
,然后使用Select Case
运行不同的例程来替换submatches $2-$4
(我存储在一个简单的数组中)<强>码强>
Sub TestSub()
Dim strIn As String
Dim objRegex As Object
Dim objRegMC As Object
Dim objRegM As Object
Dim vArray(1 To 3, 1 To 2)
vArray(1, 1) = "No 1a"
vArray(2, 1) = "No 2a"
vArray(3, 1) = "No 3a"
vArray(1, 2) = "number 1b"
vArray(2, 2) = "number 2b"
vArray(3, 2) = "number 3b"
Set objRegex = CreateObject("vbscript.regexp")
strIn = "a12stuff notme b34other missthis"
With objRegex
.Pattern = "([a-z]{1})(\d)(\d)([a-z]+)"
.Global = False
.IgnoreCase = True
.MultiLine = False
Do While .test(strIn)
Set objRegMC = .Execute(strIn)
For Each objRegM In objRegMC
Select Case objRegM.submatches(0)
Case "a"
strIn = .Replace(strIn, "$1" & vArray(1, 1) & vArray(2, 1) & vArray(3, 1))
Case "b"
strIn = .Replace(strIn, "$1" & vArray(1, 2) & vArray(2, 2) & vArray(3, 2))
End Select
Next
Loop
End With
MsgBox strIn
End Sub